【发布时间】:2013-08-27 13:13:58
【问题描述】:
我正在构建一个共享库,并且有一个结构如下的源代码树:
Makefile.am
src/
Makefile.am
srcfile1.h
srcfile1.cpp
...
thirdpaty/
Makefile.am
lib1/
Makefile.am
lib1.h
lib1.cpp
...
lib2/
...
我使用递归 Automake,因为一些第三方库是随它们自己的 Automake 文件一起分发的。 src/Makefile.am 包含常用的 libtool 宏:
lib_LTLIBRARIES = libmylib.la
libmylib_la_SOURCES = scrfile1.h srcfile1.cpp ...
如何将主库链接到第三方库? Autotools manual 让我相信第三方库需要构建为 libtool 便利库,所以我在thirdparty/lib1/Makefile.am 中有以下内容:
noinst_LTLIBRARIES = libthirdpaty1.la
libthirdpaty1_la_SOURCES = lib1.cpp lib1.h
并在src/Makefile.am中添加以下内容:
libmylib_la_LIBADD = $(top_buildir)/thirdparty/lib1/libthirdpaty1.la
我的根 Makefile.am 包含 INCLUDES 宏:
INCLUDES = -I$(top_builddir)/thirdparty
但是使用这种配置构建会出现未定义的符号错误。
构建此源代码并将所有库链接在一起的正确方法是什么?
【问题讨论】:
-
你所做的看起来很正常。因此,我将从查看符号开始。它们被定义了吗?如果有多个便利库,它们是否以正确的顺序链接?以此类推。
-
你是对的,我以错误的顺序包含子文件夹。感谢您的提示!
标签: shared-libraries autotools autoconf automake libtool