我正在使用autoconf,automake和libtool构建程序。我的工作要求我静态链接(大部分)库。过去这不是问题因为我可以使用
当然,
到目前为止,我尝试使用
我还尝试了
这些问题类似,但并没有真正回答我的问题:
- Force linking a static library into a shared one with Libtool - Is it possible to link some — but not all — libraries statically with libtool? (我不想从系统中删除共享库,指定所有内容的完整路径几乎和手动链接一样糟糕,但也许这是唯一的方法。)
-all-static
来链接所有的库。现在有一个问题,因为我必须使用一个只有动态库的库;它是由第三方给我们的,我们没有源代码。当然,
-all-static
现在导致构建失败。有没有可能告诉libtool静态链接除了这个库之外的所有东西?是不是静态和动态链接的任意组合都可能由libtool完成,或者只能是全静态或全动态?到目前为止,我尝试使用
LDFLAGS = -static
创建一个便捷库,该库依赖于我想要静态链接的库。但是libtool不会连接静态库,就像我希望的那样。依赖于便利库的程序仍然动态链接所有内容。我还尝试了
--disable-shared
,但这对构建没有影响。这些问题类似,但并没有真正回答我的问题:
- Force linking a static library into a shared one with Libtool - Is it possible to link some — but not all — libraries statically with libtool? (我不想从系统中删除共享库,指定所有内容的完整路径几乎和手动链接一样糟糕,但也许这是唯一的方法。)
Makefile.am
,对吧?这也会导致像AC_CHECK_LIB
这样的宏出现问题(它只是将-l
添加到LIBS
中),但我想这是可以预料的。 - tprk77configure.ac
中。一旦在那里,你可以添加DYNLIBS="-Wl,-Bdynamic,-L/path/to,-lshared,-Bstatic"
并调用AC_SUBST([DYNLIBS])
。然后你只需要在你的Makefile.am
中调用$(DYNLIBS)
。这会给你更多的控制权,但请记住,AC_CHECK_LIBS
不检查静态库和动态库。这是你想要的吗?还是有其他什么东西可以使它更灵活? - NickWMakefile.am
中的cjpeg
目标为例)。我已经更改了cjpeg_LDADD = -ljpeg
并添加了cjpeg_LDFLAGS = -Wl,-Bstatic,-ljpeg,-Bdynamic
,但仍然将libjpeg.so
添加到参数并动态链接。如果我说cjpeg_LDADD =
,它会抱怨缺少符号。如果我说cjpeg_LDFLAGS = -Wl,-static
,它会失败并显示“尝试静态链接动态对象”。该库本身是构建过程的一部分-也许这就是问题所在? - dma_k./configure --disable-shared
来实现这一点(不需要使用Makefile.am
进行其他技巧)。看起来这是目前唯一的解决方法。 - dma_k