R..*_*R.. 5 c linker gcc shared-libraries
我遇到过一些构建使用共享库或动态加载模块的项目的情况,其中模块/库依赖于另一个库,但在尝试链接之前不检查共享副本是否可用.这会导致来自静态存档(.a文件)的目标文件被拉入到结果中.so,并且由于这些目标文件是非PIC,因此生成的.so文件具有TEXTREL(非常糟糕的加载性能和内存使用)或者完全失败(在诸如arch之类的拱门上) x86_64,不支持非PIC共享库).
有什么办法可以让gcc编译器驱动程序拒绝将静态库代码链接到共享库输出中吗?可能需要从libgcc.a等链接最小量,这似乎很困难和复杂......
如您所知,您可以使用 -static 仅链接到静态库,但似乎没有一个很好的等效项仅链接到动态库。
以下答案可能有用...
如何使用 GCC 链接而不使用 -l 或硬编码路径来链接不遵循 libNAME.so 命名约定的库?
您可以使用 -l:[libraryname].so 列出要在库搜索路径中链接的动态库。指定 .so 结尾可能会对仅动态库的情况有所帮助。您可能必须指定带有“lib”前缀的完整名称,而不仅仅是缩写版本。