静态编译libparted.a, parted的艰难历程失去的时空

源码版本使用:parted-3.1

依赖好几个库,其中libuuid.a是管理设备唯一识别码的,必需加上,其它的则可选。luuid.a现在不是独立发布,而是存在于util-linux-ng包里,下载util-linux-ng-2.18,然后

[root@localhost util-linux-ng-2.18]$./configure --host=arm-hisiv100-linux CC=arm-hisiv100-linux-gcc --prefix=$HOME/CompileCenter --exec-prefix=$HOME/CompileCenter --disable-shared --without-ncurses --disable-fsck

不需要编译整个包的库,

[root@localhost util-linux-ng-2.18]$cd shlibs/uuid

[root@localhost util-linux-ng-2.18]$make;make install

在$HOME/CompileCenter下能看到libuuid.a,奇怪libuuid.so也有。


现在开始编译libparted了

[root@localhost parted-3.1]$./configure --host=arm-hisiv100-linux CC=arm-hisiv100-linux-gcc --prefix=$HOME/Lib --exec-prefix=$HOME/Lib --disable-device-mapper --without-readline --disable-shared --disable-dynamic-loading CPPFLAGS="-I$HOME/CompileCenter/include" LDFLAGS="-L$HOME/CompileCenter/lib"

[root@localhost parted-3.1]$make;make install

编译成功了,这时的$HOME/Lib/lib/libparted.a是正常能用的。


但是

[root@localhost parted-3.1]$file $HOME/Lib/sbin/parted

却显示动态链接的,拿到测试板卡上不能用。


把$HOME/CompileCenter下的libuuid.so删除,重新编译,它居然不会链接libuuid.a。

编译进入到parted目录报错arm-hisiv100-linux-gcc: $HOME/CompileCenter/lib/libuuid.so: No such file or directory


只能切换到parted目录手动编译。

[root@localhost parted-3.1]$cd parted

[root@localhost parted]$cp $HOME/CompileCenter/lib/libuuid.a .

[root@localhost parted]$cp $HOME/Lib/lib/libparted.a .

[root@localhost parted]$ arm-hisiv100-linux-gcc -static -g -O2 -Wall command.o parted.o strlist.o table.o ui.o version.o libparted.a libver.a libuuid.a 
$PWD/libparted.a(close-stream.o): In function `close_stream':
$HOME/parted-3.1/lib/close-stream.c:58: warning: This version of __fpending returns bytes remaining in buffer for both narrow and wide streams.  glibc's version returns wide chars in buffer for the wide stream case.

有警告,但编译出的a.out是静态链接的,能正常使用。


注意:里面的*.o文件如果被删除了,应先make到失败后,用生成的*.o文件,进行手动编译。直接编译.c文件会有头文件引用报错。


参考:http://lists.gnu.org/archive/html/bug-parted/2010-03/msg00011.html


你可能感兴趣的:(识别码)