您可以编辑.pc
文件以使其支持静态链接,特别是如果您有能力自己编译,修补和安装软件,而不是依赖某些Linux发行版。
以下是一个支持动态链接和静态链接的.pc
文件示例。这是从/usr/lib/x86_64-linux-gnu/pkgconfig/xcb.pc
了我的Ubuntu系统上:
prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/x86_64-linux-gnu
includedir=${prefix}/include
xcbproto_version=1.11
Name: XCB
Description: X-protocol C Binding
Version: 1.11.1
Requires.private: pthread-stubs xau >= 0.99.2 xdmcp
Libs: -L${libdir} -lxcb
Libs.private:
Cflags: -I${includedir}
如果运行pkg-config --libs xcb
,它假定你想要的动态版本,它可以让你只-lxcb
。 xcb.so
动态共享对象将知道如何加载它自己的所有依赖关系,因此在链接时不必指定它们。
如果您运行pkg-config --libs xcb --static
,则.private
字段发挥作用,并且您获得-lxcb -lXau -lXdmcp
。
我还没有遇到过很多知道将--static
参数传递给pkg-config
的构建系统。因此,如果您的.pc
文件仅用于支持静态链接,则最好不要使用.private
字段,只提供人们无条件需要的所有依赖关系。这样,即使人们不知道它是静态的,或者不知道通过--static
到pkg-config
,人们也可以成功地链接到图书馆。
这很有趣。这是一个记录的选项?我有(来自clang?)的链接器似乎不支持它:“找不到-l:libpng16.a的ld:library”。 – Kornel
@porneL,是的,它被记录。我在手册中引用了一段引文。 –