【问题标题】:How do you set the order of libraries in automake?你如何在automake中设置库的顺序?
【发布时间】:2010-12-11 14:45:14
【问题描述】:

automake中如何设置库的顺序?

在我的 am 文件中,我有类似的内容:

myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la
myprog_LDFLAGS = -static -L/home/user/lib -ladhoc

现在,当我编译时,我也得到了类似的编译行:

gcc -static myprog-myprog.o -o myprog -L/home/user/lib -ladhoc ./.libs/libmine.a

问题在于 libmine.a 依赖于 libadhoc.a,因此编译行应该是:

gcc -static myprog-myprog.o -o myprog ./.libs/libmine.a -L/home/user/lib -ladhoc

如何在 automake 中设置库的顺序? (或者可能是一种解决方法;您如何在编译行中重复所有库。这就是我在自定义 Makefile 中所做的。)

【问题讨论】:

    标签: c gcc autotools autoconf automake


    【解决方案1】:

    来自 Automake 手册(主要是 §8.1.2,但也有 §8.4):

    PROG_LDADD 不适合 传递特定于程序的链接器标志 (-l-L-dlopen-dlpreopen)。所以,使用 PROG_LDFLAGS 这个变量 目的。

    这意味着您可以(但实际上您应该)在LDADD 中使用-l-L,而不是在LDFLAGS 中。换句话说,您的Makefile.am 应该简单地阅读

    myprog_DEPENDENCIES = adhoc-target
    myprog_SOURCES = myprog.c
    myprog_LDADD = libmine.la -L/home/user/lib -ladhoc
    myprog_LDFLAGS = -static 
    

    【讨论】:

    • 这解决了我在使用 libgcrypt 时遇到的几乎相同的问题。谢谢!
    【解决方案2】:

    automake 书 (http://sources.redhat.com/autobook/autobook/autobook_92.html) 中的一个想法:从 libmine 和 libadhoc 创建一个便利库,并将 myprog 与它链接起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2012-11-29
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多