【问题标题】:Linking to sibling libtool library with recursive Automake使用递归 Automake 链接到同级 libtool 库
【发布时间】: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


【解决方案1】:

事实证明,源布局和 libtool 使用都很好,但我的根 Makefile.am 有以下宏:

SUBDIRS = src thirdparty

应该是这样的

SUBDIRS = thirdparty src

由于src/ 中的代码引用了thirdparty/ 中的代码,因此需要先构建thirdparty/ 代码。 SUBDIRS 宏使子文件夹按照指定的顺序从左到右构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多