0

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

4

2 回答 2

2

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

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

这不应该与动态加载工具相混淆,动态加载工具要求您在运行时加载库,并获取给定函数名称的函数指针或句柄。

对于该程序,您可以在 in 中'prog'添加额外的标志。prog_LDFLAGSMakefile.am

于 2014-03-24T19:48:56.340 回答
1

如果您使用 Autoconf 和 A​​utomake,那么您应该能够在编译时传入链接器标志以使用以下内容进行 make:

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

使用上面的变量,仍然允许您通过使用前面的方法传递它们来添加标志。

于 2014-03-24T20:02:11.023 回答