gpt4 book ai didi

c - 静态库自动发现和链接

转载 作者:行者123 更新时间:2023-12-02 00:37:46 27 4
gpt4 key购买 nike

我有以下问题,似乎没有很好的解决方案。

例如,我有一个使用 libtiff 和 libX11 的 CLI 实用程序。我想生成此实用程序的两个版本:动态链接和静态链接(尽可能多地编译入依赖项)。

对于动态链接,一切都很好:需要指定 -ltiff -lX11,链接器将生成一个很好的可执行文件,引用 libtiff.solibX11 .so.

静态链接的情况变得更糟。当我使用以下命令时:

g++ -static-libgcc -Wl,-static -o my.out *.o -lc -ltiff -lX11

它以 libtiff.a 和 libX11.a 中遗漏的符号结尾。 OK,我可以把它们依赖的所有库放到一行中:

g++ -static-libgcc -Wl,-static -o my.out *.o -lc -ltiff -ljpeg -lz -lX11 -lXau -lxcb -lXdmcp

但是有没有什么工具可以帮我做出这个发现呢?可以libtool在这里帮忙(我看到 /usr/lib/libtiff.la 但没有 /usr/lib/libX11.la)?有人可以提供 libtool 的基本示例吗?情况很关键,如果在某些平台上 libtiff 提供了更窄的功能并且没有链接到 libjpeg ,这在该平台上根本不可用,所以上面的命令由于不满足库依赖性,链接将失败。

第二个问题是由于那个警告(我相信):

/usr/lib/libX11.a(xim_trans.o): In function `_XimXTransSocketUNIXConnect':
(.text+0xcda): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

该实用程序未静态链接到 libc,它仍显示在 ldd 输出中。在这种情况下,如何正确静态链接 libX11libc

This问题是相关的,但我认为重新打包系统 .a 文件不是个好主意。

最佳答案

对于像 X11R7 库那样为 pkg-config 提供 .pc 文件的库:

% pkg-config --static --libs x11
-lX11 -lpthread -lxcb -lXau

不幸的是,pkg-config --list-all 似乎没有将 libtiff 显示为其中之一提供这些的库,但你至少可以将你的链接命令变成:

g++ -static-libgcc -Wl,-static -o my.out *.o -lc -ltiff -ljpeg -lz `pkg-config --static --libs x11`

然后不必担心跟踪 libX11 版本需要哪些库(因为 libxcb 直到最近都是可选的,所以旧的 Linux 发行版可能没有它)。

关于c - 静态库自动发现和链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3932742/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com