【发布时间】:2024-01-18 11:45:01
【问题描述】:
是否可以在 Makefile.am 中设置此类标志?这将解决我在https://*.com/questions/22617744/how-to-disable-the-runtime-checking-of-dynamic-libraries-if-they-are-not-used 提出的问题。
【问题讨论】:
标签: compilation linker autotools dynamic-linking ldflags
是否可以在 Makefile.am 中设置此类标志?这将解决我在https://*.com/questions/22617744/how-to-disable-the-runtime-checking-of-dynamic-libraries-if-they-are-not-used 提出的问题。
【问题讨论】:
标签: compilation linker autotools dynamic-linking ldflags
如果您使用 Autoconf 和 Automake,那么您应该能够在编译时传入链接器标志以使用以下内容进行 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
使用上面的变量,你仍然可以通过使用前面的方法来添加标志。
【讨论】:
AM_LIBS 不存在。
一些链接器可以选择在链接时忽略未解析的符号 - 只要您确定库将在 加载 时可用。例如,对于GNU ld,有:--unresolved-symbols,其中类似的选项:--unresolved-symbols=ignore-in-shared-libs 可能是合适的。 OS X (Mach-O) 链接器有:-undefined <error|warning|suppress|dynamic_lookup>
运行程序时,所有符号必须由动态链接器/加载器解析。
这不应与 dynamic loading 设施混淆,后者要求您在运行时加载库,并获取给定函数名称的函数指针或句柄。
对于程序'prog',您可以在Makefile.am 中为prog_LDFLAGS 添加额外的标志。
【讨论】: