4

因此,在我运行 libtool 并从我的库源中取出一个libfoo.lo文件foo.o后,我如何将libfoo.lo文件转换为普通的 Linux 共享库,libfoo.so.1.0.0这样我就可以在我的目标系统上安装并链接到它?

4

1 回答 1

8

从问题中提到的输出来看,您似乎使用 --mode=compile 模式运行了 libtool。您需要使用 --mode=link 再次运行 libtool 以生成 .a 和 .so 库。

libtool 只是生成库所需的 gcc、ln ar 和 ranlib 的简单包装器。它所做的只是运行 gcc 添加必要的选项以确保正确创建静态库和共享库。

编译 libtool 时插入 -fPIC 标记以确保生成共享库所需的与位置无关的代码。.o 文件是可以归档到静态 .a 文件中的普通目标文件。.lo 文件是具有位置无关代码的目标文件,现在可以链接到 .so 文件中。

链接时 libtool 将运行 ar 创建静态库或运行 ln 将对象文件链接到 .so 共享库。

libtool 还可以在需要时使用 --mode=install 安装库。

有关更多信息,请参见http://www.gnu.org/software/libtool/manual/libtool.html

请记住,在构建可执行文件时,总是有两个阶段,编译和链接。

于 2009-12-31T16:08:22.730 回答