我有一个共享对象库(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 新手。
答案 0 :(得分:0)
对于帮助我here的同样的事情,你可能会得到帮助:
-Wl,--whole-archive,$(ARCHIVE1_PATH)/archive1.a,$(ARCHIVE2_PATH)/archive2.a,--no-whole-archive
使用逗号指定多个参数到一个-Wl
选项将使Automake将它们视为一个单元,并且不会移动它们。缺点是Automake不会发现这些目标文件是库的依赖项,因此您可能还必须指定_DEPENDENCIES
。