c - 你如何在automake中设置库的顺序?

标签 c gcc autotools autoconf automake

在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 中所做的。)

最佳答案

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

PROG_LDADD is inappropriate for passing program-specific linker flags (except for -l, -L, -dlopen and -dlpreopen). So, use the PROG_LDFLAGS variable for this purpose.

这意味着您可以(但实际上您应该)在 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 

关于c - 你如何在automake中设置库的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1649864/

相关文章:

c - 在裸机程序中使用程序库

c - 为什么 gcc 为 memcpy 复制 rodata 字符串?如何避免?

c - 当我尝试编译时出现此错误

makefile - 在每个子目录(子 make)中的 Makefile.am 上使用相同的 CFLAGS

c++11 - Autotools/libtool 链接库与 libstdc++,尽管 -stdlib=libc++ 选项传递给配置

c - 魔数(Magic Number)程序

php - 加载由 blenc 加密的页面时出错(C 和 PHP 代码)

C# 编码(marshal)处理 C DLL struct bool

c - difftime的粒度

cross-compiling - autotools:C 编译器无法创建可执行文件