1

我在 linux 上生成一个共享库,我正在使用这个 xml 解析器“mini xml”来解析我的库的一些 xml 配置文件。我想要的不是对这个 xml 解析器有任何依赖,所以我想使用供应商提供的静态 libmxml.a 库,而不是使用 libmxml.so,它也与 libmxml.so 一起存在,这样我的共享库就可以了部署时不依赖于 libmxml。我已经尝试过,但它不起作用。

gcc -fPIC -o myobject.o -static -lmxml -c myobject.c

但它发出警告

链接器输入未使用,因为链接未完成

我错过了什么?任何帮助,将不胜感激。

4

2 回答 2

3

您会收到警告,因为 -c仅表示 compile。链接器永远不会运行,因此作为链接器命令的 -lmxml 无效。

-static将使整个可执行文件静态化,这也意味着静态 libc。这可能不是你想要的。仅静态链接 libmxml.a 使用:

gcc -fPIC myobject.o -o executable /usr/lib/libmxml.a

或者

gcc -fPIC myobject.o -o executable -Wl,-Bstatic -lmxml -Wl,-Bdynamic

创建共享库而不是可执行文件 add -shared

于 2012-12-21T12:07:38.433 回答
1

您需要专门为此构建 mxml 库,使用 PIC 代码 ( -fPIC) 创建一个静态库,例如libmxml_pic.a。包含仅适用于可执行文件的libmxml.a位置相关代码(在 32 位 x86 上它可以工作,但仍然很难看)。

您还需要避免从库中导出 mxml 符号。您可以使用版本脚本(--version-script至 ld,请参阅文档)和/或通过-fvisibility=hidden在编译 mxml 对象时传递来执行此操作。

于 2012-12-21T14:10:40.050 回答