0

我有一个 Autogen Makefile.am,我试图用它来为共享库构建测试程序。为了构建我的测试二进制文件,我想继续将共享库构建为目标,但我希望静态链接测试程序。在过去的几个小时里,我一直在尝试制作我的 Makefile.am 来让它做到这一点。

  • 我已经尝试显式更改 LDADD 行以使用库的 .a 版本并得到一个未找到文件的错误,即使我可以看到这个库正在构建。

  • 我尝试通过 LDFLAGS 将 .libs 目录添加到我的链接路径中,但仍然找不到它。

  • 我尝试将我的库源移动到我的测试源列表中,但这不起作用,因为可执行目标文件的构建方式与静态库的不同。

  • 我什至尝试为 .a 版本复制一个 lib_LIBRARIES 条目(因此同时存在一个 lib_LTLIBRARIES 和一个 lib_LIBRARIES),并将共享版本的所有 LDFLAGS、SOURCES、dir 和 HEADERS 复制为静态版本的一部分(将la替换form _a_SOURCES = _la_SOURCES. 这仍然行不通,因为现在它无法弄清楚要构建什么。

  • 我的 configure.ac 文件使用的是默认的 LT_INIT,它应该给我静态库和动态库,正如我所说,即使 libtool 看不到 .a 文件,它也正在构建两者。

请问有谁知道这个怎么做?

4

1 回答 1

0

正如@Brett Hale 在他的评论中提到的那样,您应该告诉Makefile.am您希望程序是静态链接的。

要实现这一点,您必须附加-static到您的LDFLAGS.
通过更改LDFLAGS来更改特定二进制文件的binary_LDFLAGS(其中 binary 是您要构建的二进制文件的名称)。

所以这样的事情应该可以解决问题:

binary_LDFLAGS = $(AM_LDFLAGS) -static
于 2012-10-26T08:48:26.853 回答