Ответ 1
Вы можете указать полный путь к статическим libs без флага -l
для связи с ними.
gcc ... source.c ... /usr/lib32/libmysuperlib.a ...
При связывании с библиотеками, использующими параметр -l
(скажем, -lfoo
), gcc предпочтет общий объект для статической библиотеки, если они будут найдены (предпочтительнее libfoo.so
- libfoo.a
). Есть ли способ сделать gcc предпочтительнее статической библиотеки, если они найдены?
Проблема, которую я пытаюсь решить, заключается в следующем: я создаю плагин для приложения (имитатор полета под названием X-Plane) со следующими ограничениями:
/usr/lib
или /usr/lib32
:
LD_PRELOAD
или LD_LIBRARY_PATH
для поиска общих объектов, поставляемых с моим плагиномдля решения вышеуказанных ограничений, возможным решением является связывание сгенерированного общего объекта с статическими 32-разрядными версиями всех нетривиальных библиотек. но при установке таких библиотек обычно устанавливаются как статические, так и динамические версии, и, следовательно, gcc всегда будет ссылаться на общий объект вместо статической библиотеки.
конечно, перемещение/удаление/удаление общих объектов, о которых идет речь, и просто оставление статических библиотек в say /usr/lib32
, это обход, но это не приятный
Примечание:
-Wl,-static -lfoo -Wl,-Bdynamic,
, но не приносил ожидаемых результатов-l:libfoo.a
, но это не принесло ожидаемых результатовВы можете указать полный путь к статическим libs без флага -l
для связи с ними.
gcc ... source.c ... /usr/lib32/libmysuperlib.a ...
Просто добавьте файл .a
в линию ссылок без -l
, как если бы это был файл .o
.
Он устарел, но может работать: http://www.network-theory.co.uk/docs/gccintro/gccintro_25.html
(почти конец страницы)
"Как уже отмечалось ранее, можно также напрямую связать файлы с отдельными библиотечными файлами, указав полный путь к библиотеке в командной строке".