构建共享库但链接到静态库

时间:2012-10-23 19:23:10

标签: makefile shared-libraries static-libraries autotools configure

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

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

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

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

  • 我甚至尝试复制.a版本的lib_LIBRARIES条目(因此有lib_LTLIBRARIES和lib_LIBRARIES)并复制共享版本的所有LDFLAGS,SOURCES,dir和HEADERS作为静态版本的一部分(用_a_SOURCES = _la_SOURCES形式的 a 替换 la 。仍然无效,因为现在它无法弄清楚要构建什么。

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

拜托,有人知道怎么做吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

binary_LDFLAGS = $(AM_LDFLAGS) -static