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

Makefile 构建共享库但链接到静态库,makefile,shared-libraries,static-libraries,autotools,configure,Makefile,Shared Libraries,Static Libraries,Autotools,Configure,我有一个Autogen Makefile.am,我正试图使用它为共享库构建一个测试程序。为了构建我的测试二进制文件,我想继续构建共享库作为目标,但我想静态链接测试程序。我已经花了几个小时来制作我的Makefile.am 我已尝试显式更改LDADD行以使用.a版本的库并获取未找到的文件错误,即使我可以看到此库正在生成 我试图通过LDFLAGS将.libs目录添加到我的链接路径,但它仍然找不到 我尝试将我的库源移到我的测试源列表中,但这不起作用,因为可执行对象文件的构建方式与静态库不同 我甚至尝试

我有一个Autogen Makefile.am,我正试图使用它为共享库构建一个测试程序。为了构建我的测试二进制文件,我想继续构建共享库作为目标,但我想静态链接测试程序。我已经花了几个小时来制作我的Makefile.am

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

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

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

  • 我甚至尝试复制.a版本的lib_LIBRARIES条目(因此既有lib_LTLIBRARIES也有lib_LIBRARIES),并将共享版本的所有LDFLAGS、SOURCES、dir和header作为静态版本的一部分进行复制(将la替换为形式为_a_SOURCES=_la_SOURCES的a。这仍然不起作用,因为现在它无法确定要构建什么

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


请告诉我,有人知道怎么做吗?

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

要实现这一点,必须将
-static
附加到
LDFLAGS

更改特定二进制文件的
LDFLAGS
可以通过更改
binary\u LDFLAGS
来实现(其中binary是要生成的二进制文件的名称)

所以,像这样的事情应该可以做到:

binary_LDFLAGS = $(AM_LDFLAGS) -static

prog\u LDFLAGS=-static
谢谢!成功了!将LDADD与库保持在.la格式(共享)但是在LDFLAGS上强制使用static确实会强制使用与my library的静态链接!谢谢!谢谢!la不一定是共享库。它实际上是一个文本文件,包含库的静态和共享版本的位置,以及一些其他信息。