libtool如何链接静态的c库

本文介绍了一种使用libtool进行静态编译时遇到的问题及解决方案,通过手动调整编译命令并指定静态库路径成功避免了动态库的链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        遇到问题就发帖,这是大牛们忌讳的东西。我也不是很喜欢,不过从另一个方面我就又喜欢了,如果遇到问题一通乱搜毫无目的也不利于问题的解决。搜是肯定要先搜一下,我解决问题的关键点是在最后发帖了,有没有人回复是再说,但是是一旦发帖,发的时候就会认认真真地把问题梳理一下,截图的截图,复制错误信息,并具会仔细查看,再然后就是通俗的描述出问题给大家看。结果不重要,过程相当重要,当这样真做下来的时候会比刚才盲目的搜的清晰很多,大多数是在发帖后自己最终解决了问题。这就是我喜欢之处。

         今天就遇到一个问题,一个没有仔细了解过的东西libtool,编译一个开源的程序的时候遇到的。想要静态编译这个程序,但是怎么配置都不行,都会去链接动态库。发了贴之后,自己解决了问题,并分享出去了。发帖内容和解决方案这里誊一下。

问题描述:

要静态编译一个开源的软件,结果发现是用libtool来实现的编译,所幸需要的那个可执行程序链接的库并不多,保有4个,其中两个是我编译出来的,有所了解。摸爬滚打的将对应的动态库改名,然后就会主动链接静态库。这里称为liba.a libb.a。编译出来后用readelf看不到需要这两个动态库了。

但是还有两个库,一个是c库,一个是math库。我尝试用上述方法来解决,但是是不行的。libtool执意要去链接libc.so.6,我都不知道如何去实现了。

Plain Text code
?
1
2
3
4
5
6
7
8
9
$ make
arm-linux-gcc -DHAVE_CONFIG_H -I. -I../..  -I../../include -I../../include  -I/usr/include/ijs -Wall -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wwrite-strings -Werror-implicit-function-declaration -Winline -Wformat=2 -finline-limit=131072   -Disfinite=finite  -O6 -static-libtool-libs -MT ijsgutenprint.o -MD -MP -MF .deps/ijsgutenprint.Tpo -c -o ijsgutenprint.o ijsgutenprint.c
arm-linux-gcc: unrecognized option '-static-libtool-libs'
mv -f .deps/ijsgutenprint.Tpo .deps/ijsgutenprint.Po
/bin/sh ../../libtool --tag=CC   --mode=link arm-linux-gcc  -Disfinite=finite  -O6 -static-libtool-libs   -o ijsgutenprint.5.2 ijsgutenprint.o ../../src/main/libgutenprint.la -lijs  
libtool: link: arm-linux-gcc -Disfinite=finite -O6 -o ijsgutenprint.5.2 ijsgutenprint.o  ../../src/main/.libs/libgutenprint.a -lm -lijs
/opt/FriendlyARM/toolschain/4.5.1/lib/gcc/arm-none-linux-gnueabi/4.5.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find /lib/libc.so.6
collect2: ld returned 1 exit status
make: *** [ijsgutenprint.5.2] 错误 1


libtool的初衷是为了方便,但是我用起来怎么这么困难呢。

我试了-static-libtool-libs  --rpath等等都不行,方法是看自这里《 使用 GNU Libtool 创建库 》的。

解决方案:

解决了,解决了,还好我的源码只有一个,然后库也不多。解决方案这里也分享一下:libtool会把它的编译命令打印出来,手动复制一下手动编译,将.la之类的去掉,需要哪个静态库直接加上该链接库的绝对路径,我的是这样解决的:

Plain Text code
?
1
arm-linux-gcc  -Disfinite=finite  -O6 -static   -o ijsgutenprint.5.2 ijsgutenprint.o ../../src/main/.libs/libgutenprint.a  -lijs /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib/libgcc.a /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib/libm.a

这里提供了思路,希望对大家有用。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值