遇到问题就发帖,这是大牛们忌讳的东西。我也不是很喜欢,不过从另一个方面我就又喜欢了,如果遇到问题一通乱搜毫无目的也不利于问题的解决。搜是肯定要先搜一下,我解决问题的关键点是在最后发帖了,有没有人回复是再说,但是是一旦发帖,发的时候就会认认真真地把问题梳理一下,截图的截图,复制错误信息,并具会仔细查看,再然后就是通俗的描述出问题给大家看。结果不重要,过程相当重要,当这样真做下来的时候会比刚才盲目的搜的清晰很多,大多数是在发帖后自己最终解决了问题。这就是我喜欢之处。
今天就遇到一个问题,一个没有仔细了解过的东西libtool,编译一个开源的程序的时候遇到的。想要静态编译这个程序,但是怎么配置都不行,都会去链接动态库。发了贴之后,自己解决了问题,并分享出去了。发帖内容和解决方案这里誊一下。
问题描述:
要静态编译一个开源的软件,结果发现是用libtool来实现的编译,所幸需要的那个可执行程序链接的库并不多,保有4个,其中两个是我编译出来的,有所了解。摸爬滚打的将对应的动态库改名,然后就会主动链接静态库。这里称为liba.a libb.a。编译出来后用readelf看不到需要这两个动态库了。
但是还有两个库,一个是c库,一个是math库。我尝试用上述方法来解决,但是是不行的。libtool执意要去链接libc.so.6,我都不知道如何去实现了。
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之类的去掉,需要哪个静态库直接加上该链接库的绝对路径,我的是这样解决的:
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
|
这里提供了思路,希望对大家有用。