如何强制测试程序链接到由libtool构建的静态库

4

我有一个由autotools管理的库。在Makefile.am中,我有以下行以及其他必要的配置。

lib_LTLIBRARIES = libstuff.la

我的项目还构建了一个程序来运行一些测试套件。该程序配置如下:
noinst_PROGRAMS = runtests
runtests_SOURCES = test/stuff.c stuff.h
runtests_LDADD = libstuff.la

然而,该程序总是链接到libstuff.la的动态版本,这会使一些情况变得复杂(例如,使用gdb进行调试)。我怎样可以强制程序链接到libstuff.a而不是libstuff.so或等效的动态库?


调试并不复杂。你只需要记住在每个命令前加上 libtool --mode=execute 即可。对于 gdb,这意味着:libtool --mode=execute gdb runtests。就这么简单。 - jørgensen
@jørgensen 这似乎是一个不错的解决方案,但在这里没有起作用。我运行了 libtool --mode=execute gdb runtests 并得到了 libtool: unknown option character '-' in: --mode=execute 的错误提示。我在 Mac OS 上使用的是 i686-apple-darwin10-gcc-4.2.1 和 autotools 2.61。 - brandizzi
1个回答

9

正确的做法是将-static标志添加到LDFLAGS变量中。

对于所有目标:AM_LDFLAGS = -static

或者特别针对测试程序:runtests_LDFLAGS = -static


好的!这使得我的回答变得不必要。 - Jan
我已经尝试过这个了,但似乎没有效果——我添加了autoreconf、清理并重新构建,但所有东西仍然是动态链接。我也尝试使用-all-static,但同样没有效果... - Chris Dodd
@ChrisDodd - 你的意思是仍在使用外部动态库吗?还是完全自包含于软件包内的库?例如,如果你依赖于外部的libpng,那么automake的-static选项是无法帮助你的。 - Brett Hale
即使静态库可用,外部库仍然动态链接。 - Chris Dodd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接