2014-03-24 49 views

回答

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 

使用上述变量,将仍然允许你通过传递添加标志他们使用以前的方法。

+2

'AM_LIBS' does not exist。 – DanielKO

+0

prog_LDADD在AM_LIBS的位置完成任务似乎并不存在。 – innoSPG

+1

@DanielKO使用基本的Makefile.am,您是正确的,但只需将行添加到目标宏之前的Makefile.am即可。 –

1

有些连接器可以选择在链接时忽略未解析的符号 - 只要您确定该库将在加载时间可用。例如,对于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

相关问题