【发布时间】:2013-01-01 16:06:39
【问题描述】:
我目前正在做一个更大的项目,其中包含很多库,我有一些 关于为什么 gcc 在 linux 下的行为方式的问题。
首先,我想您可能知道,您可以使用 gcc/g++ 的“-lxyz”链接器标志在某些系统路径中搜索 libxyz.so 并链接到它。但是,这在静态库的情况下不起作用,即,如果我想链接 libxyz.a,我必须明确添加 /usr/lib/libxyz.a 作为目标文件。
我的问题如下:如果我想在我的项目中包含一个 pkg-config 样式的 .pc 文件,如果用户选择构建一个静态库,我应该在其中放入什么?
另外,我发现 gcc/g++ 没有像我期望的那样处理库依赖关系,这很烦人:
如果我将我的程序链接到 libabc.so,并且如果 ldd 告诉我 libabc.so 依赖于 libxyz.so,那么我认为 gcc/g++ 应该足够聪明,也可以链接到 libxyz.so。可悲的是,情况似乎并非如此。有什么好的理由说明这不起作用还是有可能强制 gcc/g++ 考虑这些依赖关系?
【问题讨论】:
-
您也可以使用
gcc -v而不是仅使用gcc进行编译和链接,这会告诉您发生了什么。
标签: linux gcc shared-libraries static-libraries