我有一个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文件,它也正在构建它们。
拜托,有人知道怎么做吗?
答案 0 :(得分:0)
正如@Brett Hale在评论中提到的那样,你应该告诉Makefile.am
你希望程序静态链接。
要实现此目的,您必须将-static
附加到LDFLAGS
通过更改LDFLAGS
(其中binary是要构建的二进制文件的名称)来更改特定二进制文件的binary_LDFLAGS
。
所以这样的事情可以解决问题:
binary_LDFLAGS = $(AM_LDFLAGS) -static