使用-l
选项(例如-lfoo
)链接库时,如果找到两者,gcc会更喜欢共享对象(更喜欢libfoo.so
到{{1} }})。有没有办法让gcc更喜欢静态库,如果两者都找到了?
我正在尝试解决的问题如下:我正在为应用程序(飞行模拟器称为X-Plane)创建一个插件,具有以下约束:
libfoo.a
或/usr/lib
:
/usr/lib32
或LD_PRELOAD
来查找我的插件附带的共享对象为了解决上述约束,一种可能的解决方案是将生成的共享对象链接到所使用的所有非平凡库的静态32位版本。但是,在安装这些库时,通常会安装静态和动态版本,因此gcc将始终链接到共享对象而不是静态库。
当然,移动/删除/删除有问题的共享对象,只是将静态库放在说LD_LIBRARY_PATH
中,是一种解决办法,但它不是一个好的
请注意:
/usr/lib32
但没有带来预期的结果-Wl,-static -lfoo -Wl,-Bdynamic,
,但这并没有带来预期的结果答案 0 :(得分:7)
您可以指定静态库的完整路径,而不使用-l
标志与之链接。
gcc ... source.c ... /usr/lib32/libmysuperlib.a ...
答案 1 :(得分:5)
只需将.a
文件添加到没有-l
的链接行,就像它是.o
文件一样。
答案 2 :(得分:2)
已过时,但可能有效:http://www.network-theory.co.uk/docs/gccintro/gccintro_25.html
(几乎在页面的末尾)
“如前所述,通过在命令行上指定库的完整路径,也可以直接链接到各个库文件。”