Dav*_*ave 25 c++ automake libtool
我正在尝试设置一个使用libtool库和exectuable混合的automake项目,而且我很难熟悉automake文档,尤其是.与告诉编译器链接相关.
因此,有人可以解释之间的差异LDADD和LIBADD?
像:
-lname_of_library样式值与直接文件名等.每当我尝试阅读相关文档时,似乎它假定我知道我不知道的事情.
Bre*_*ale 34
将LIBADDprimary用于库和LDADD可执行文件.如果您正在构建一个libfoo.la依赖于另一个库的libtool库,那么libbar.la您将使用:
libfoo_la_LIBADD = libbar.la
Run Code Online (Sandbox Code Playgroud)
如果你有其他非libtool的库,你也将有添加这些-L和-l选项:
libfoo_la_LIBADD = libbar.la -L/opt/local/lib -lpng
Run Code Online (Sandbox Code Playgroud)
通常,您将使用configure脚本来查找这些额外的库,并使用AC_SUBST它们来传递它们:
libfoo_la_LIBADD = libbar.la $(EXTRA_FOO_LIBS)
Run Code Online (Sandbox Code Playgroud)
对于一个程序,只需使用LDADD:
myprog_LDADD = libfoo.la # links libfoo, libbar, and libpng to myprog.
Run Code Online (Sandbox Code Playgroud)
有时边界有点模糊.$(EXTRA_FOO_LIBS)本来可以加入myprog_LDADD.将依赖项添加到libtool(.la)库,并使用libtool所有特定于平台的链接器魔术,通常是最好的方法.它将所有链接器元数据保存在一个位置.
Pet*_*esh 13
正如其中一本书中所提到的,LDADD是ADDitional链接器(LD)项 - 即在执行链接时添加的项.例如,这将是在制作节目时.LDADD可以指定:
lib/libfudge.la-lm,或/lib/libmagicalwonderland.a-L/opt/lib -lmagical它们按照优先顺序排列 - 使用后两者只是在寻找麻烦,因为他们指的是可能存在或可能不存在的事物.
LIBADD是指定要使用的ADDitional LIBraries.在构建库时指定需要使用其他库来构建或使用库时使用此方法.你会看到它被指定为类似的东西libfred_la_LIBADD =.它可用于指定libtool库或系统库,并将这些库放入库的结果.la库中,因此在链接到库时,您将获得所有相应的库.
您应该只指定要链接的库,因此,例如,我的库libfred.la依赖于某些数学例程,即它依赖于libm.当我为库指定其他库时,我声明:
libfred_la_LIBADD = -lm
Run Code Online (Sandbox Code Playgroud)
我构建库时会对此依赖项进行编码,并将其传递给库的使用者.
经验法则是:
| 归档时间: |
|
| 查看次数: |
16489 次 |
| 最近记录: |