我遇到过一些构建使用共享库或动态加载模块的项目的情况,其中模块/库依赖于另一个库,但在尝试链接之前不检查共享副本是否可用。这会导致来自静态存档(.a
文件)的目标文件被拉入生成的.so
,并且由于这些目标文件是非PIC,因此生成的.so
文件具有TEXTREL(非常糟糕的负载性能和内存使用情况)或完全失败(在x86_64等不支持非PIC共享库的arch上)。
有什么方法可以让gcc编译器驱动程序拒绝将静态库代码链接到共享库输出中?可能需要从libgcc.a等链接最小量......似乎很困难和复杂。
答案 0 :(得分:1)
如您所知,您可以使用-static仅链接到静态库,但似乎没有相当于仅仅链接动态库。
以下答案可能有用......
您可以使用-l:[libraryname] .so列出要在库搜索路径中链接的动态库。指定.so结尾可能有助于您的动态库唯一案例。您可能必须使用'lib'前缀指定整个名称,而不仅仅是缩短版本。