2.2.11 关于使用libtool链接库的讨论
GNU中的大部分软件包都使用libtool处理库的链接。通常,大部分的软件在包发布时都已经包含了libtool所需的脚本工具等。但是如果一旦准备使用autoconf、automake重新生成编译脚本,且这些脚本中包含了libtool提供的M4宏,则需要安装libtool。可使用如下命令安装libtool。
在交叉编译环境中使用libtool处理库的链接时,依然还有个不大不小的问题,如同pkg-config的麻烦一样,如果使用宿主系统的libtool,那么编译库时生成的库的la文件中,记录库本身安装的位置以及依赖库的安装位置的路径将依然指向宿主系统的根文件系统,比如一个典型的la文件:
而实际上,目标系统的根文件系统在$SYSROOT下。显然,如果使用libtool链接,将会找错库的安装位置。
我们可以修改宿主系统的libtool,使其在交叉编译环境下能够创建合适的la文件;或者直接修改la文件,将类似"/usr/lib/"的路径调整为"$SYSROOT/usr/lib/";或者如pkg-config一样,封装一个libtool。但是我们采用更简单的方式,使用如下命令将la文件删除:
删除库的la文件后,链接相应的库时将不再使用libtool去寻找库的位置,而是依靠链接器去寻找库的位置。虽然libtool不建议这样做,但这样做最简单,且不容易发生错误,因此,后续我们采用这种方法。