我遇到过一些构建使用共享库或动态加载模块的项目的情况,其中模块/库依赖于另一个库,但在尝试链接之前没有检查共享副本是否可用。这会导致来自静态存档(.a
文件)的对象文件被拉到结果.so
中,并且由于这些对象文件是非PIC的,因此结果.so
文件要么具有TEXTREL(非常糟糕的加载性能和内存使用),要么完全失败(在不支持非PIC共享库的x86_64等archs上)。
有没有办法让gcc编译器驱动程序拒绝将静态库代码链接到共享库输出中?由于可能需要链接来自libgcc.a等的最小数量,这似乎很困难和复杂……
发布于 2011-06-29 02:12:16
正如您所知道的,您可以使用-static仅链接到静态库,但是似乎没有一个很好的等价物来仅链接到动态库。
下面的答案可能是有用的。
可以使用-l:libraryname.so列出要在库搜索路径中链接的动态库。指定.so结尾可能有助于处理仅限动态库的情况。您可能必须指定带有'lib‘前缀的全名,而不仅仅是缩写版本。
https://stackoverflow.com/questions/6514945
复制