链接共享库时,我可以使gcc忽略静态库吗?

时间:2011-06-29 01:46:48

标签: c gcc linker shared-libraries

我遇到过一些构建使用共享库或动态加载模块的项目的情况,其中模块/库依赖于另一个库,但在尝试链接之前不检查共享副本是否可用。这会导致来自静态存档(.a文件)的目标文件被拉入生成的.so,并且由于这些目标文件是非PIC,因此生成的.so文件具有TEXTREL(非常糟糕的负载性能和内存使用情况)或完全失败(在x86_64等不支持非PIC共享库的arch上)。

有什么方法可以让gcc编译器驱动程序拒绝将静态库代码链接到共享库输出中?可能需要从libgcc.a等链接最小量......似乎很困难和复杂。

1 个答案:

答案 0 :(得分:1)

如您所知,您可以使用-static仅链接到静态库,但似乎没有相当于仅仅链接动态库。

以下答案可能有用......

How to link using GCC without -l nor hardcoding path for a library that does not follow the libNAME.so naming convention?

您可以使用-l:[libraryname] .so列出要在库搜索路径中链接的动态库。指定.so结尾可能有助于您的动态库唯一案例。您可能必须使用'lib'前缀指定整个名称,而不仅仅是缩短版本。