是否可以在Makefile.am中设置编译和链接标志而不是configure.ac?

时间:2014-03-24 19:10:41

标签: compilation linker autotools dynamic-linking ldflags

是否可以在Makefile.am中设置此类标志?这将解决我在https://stackoverflow.com/questions/22617744/how-to-disable-the-runtime-checking-of-dynamic-libraries-if-they-are-not-used提出的问题。

2 个答案:

答案 0 :(得分:2)

一些链接器可以选择在链接时忽略未解析的符号 - 只要您确定该库在 load 时可用。例如,对于GNU ld,有--unresolved-symbols,其中像--unresolved-symbols=ignore-in-shared-libs这样的选项可能是合适的。 OS X(Mach-O)链接器具有:-undefined <error|warning|suppress|dynamic_lookup>

运行程序时,动态链接器/加载程序必须解析所有符号。

这不应与dynamic loading工具混淆,后者要求您在运行时加载库,并获取给定函数名的函数指针或句柄。

对于程序'prog',您可以在prog_LDFLAGS中向Makefile.am添加额外的标记。

答案 1 :(得分:1)

如果您正在使用Autoconf和Automake,那么您应该能够在编译时传递链接器标志以使用以下内容:

make LDFLAGS='-L/my/nonstandard/prefix/lib' target

此外,您可以为CC,CFLAGS,CPP,CPPFLAGS和LIBS执行此操作。例如:

make CC=gcc-4.2 \
    LIBS='-lmylibrary -lhislib ../lib/libcustom.a' \
    LDFLAGS='-L/opt/vend/lib' \
    CPPFLAGS='-I../include' \
    CFLAGS='-Wall' \
    target

如果要在make文件中将它们永久化,请将它们添加到automake变量中:

AM_LIBS     = -lmylibrary -lhislib ../lib/libcustom.a
AM_LDFLAGS  = -L/opt/vend/lib
AM_CPPFLAGS = -I../include
AM_CFLAGS   = -Wall

使用上述变量,仍然允许您通过使用前一个方法传递它们来添加标记。