When linking against libraries using the -l
option (say -lfoo
), gcc will prefer a shared object to a static library if both are found (will prefer libfoo.so
to libfoo.a
). Is there a way to make gcc prefer the static library, if both are found?
The issue I'm trying to solve is the following: I'm creating a plugin for an application (the flight simulator called X-Plane), with the following constraints:
/usr/lib
or /usr/lib32
:
LD_PRELOAD
или LD_LIBRARY_PATH
, чтобы найти общие объекты, поставляемые с моим плагином для устранения вышеуказанных ограничений возможное решение - связать сгенерированный общий объект со статическими 32-битными версиями всех используемых нетривиальных библиотек. но при установке таких библиотек обычно устанавливаются как статические, так и динамические версии, и, таким образом, gcc всегда будет связываться с общим объектом, а не со статической библиотекой.
конечно, перемещая / удаляя / удаляя рассматриваемые общие объекты и просто оставляя статические библиотеки в, скажем, / usr / lib32
, это обходной путь, но он не самый лучший
примечание:
-Wl, -static -lfoo -Wl, -Bdynamic,
, но не принес ожидаемых результатов -l : libfoo.a
тоже, но это тоже не дало ожидаемых результатов