在共享对象链接期间指定整个存档包含

时间:2015-03-03 20:31:31

标签: makefile autoconf automake

我有一个共享对象库(C ++中的python扩展),其中包含来自共享代码库的其他几个存档,这些存档包含在我们以前的自制版-Wl,whole-archive arhive1.a archive2.a ... -Wl,no-whole-archive中的makefile中秒。每个存档都包含在自己的子目录中,并构建为此python扩展的最终目标的一部分。我将构建环境移植到使用autoconf和automake。

在与python扩展相关的Makefile.am中,我有这个(删除了多余的东西):

pyexc_LTLIBRARIES = pyextension.la
ARCHIVE1_PATH = ../Path/to/.libs/   # built from another Makefile.am
ARCHIVE2_PATH = ../Path2/to/.libs/

pyextension_la_SOURCES = ...

pyextension_la_LDFLAGS = -lz -lrt -module ...
pyextension_la_LIBADD = $(ARCHIVE1_PATH)/archive1.a $(ARCHIVE2_PATH)/archive2.a
pyextension_la_CXXFLAGS = -std=c++0x -fPIC

所有这些东西都出现在命令行上,但它没有被正确打包,因为当我导入我的pyextension模块时,我从它看起来的档案中得到了未定义的符号错误对于。最初,我对pyextension_LDFLAGS有这样的事情:

pyextension_la_LDFLAGS = -Wl,whole-archive $(ARCHIVE1_PATH)/archive1.a $(ARCHIVE2_PATH)/archive2.a -Wl,no-whole-archive -lz -lrt -module 

然而,令我惊讶的是,当make处理了最终的Makefile时,在运行./configure之后,选项-Wl,whole-archive-Wl,no-whole-archive出现在命令行中但是< strong>它们之间没有任何(??)和其他地方列出的存档文件。所以,我认为我应该尝试pyextension_la_LIBADD与档案的路线,魔法会起作用。

我不知道从哪里开始。顺便说一句,这些其他归档库将作为我们部署的一部分安装其余的归档库,但在构建期间,它们显然还没有安装。因此,非常感谢任何有关如何实现这一点的指示。我还是 automake autoconf 新手。

1 个答案:

答案 0 :(得分:0)

对于帮助我here的同样的事情,你可能会得到帮助:

-Wl,--whole-archive,$(ARCHIVE1_PATH)/archive1.a,$(ARCHIVE2_PATH)/archive2.a,--no-whole-archive

使用逗号指定多个参数到一个-Wl选项将使Automake将它们视为一个单元,并且不会移动它们。缺点是Automake不会发现这些目标文件是库的依赖项,因此您可能还必须指定_DEPENDENCIES