Я могу смешать библиотеки статического и общего объекта при соединении?

У меня есть проект C, который производит десять исполняемых файлов, все из которых я хотел бы быть связанным в статически. Проблема, с которой я сталкиваюсь, состоит в том, что один из этих исполняемых файлов пользуется сторонней библиотекой, которой только версия общего объекта доступна.

Если я передаю -static отметьте к gcc, ld будет ошибка, говоря, что это не может найти рассматриваемую библиотеку (я предполагаю, что это ищет.a версию), и исполняемый файл не будет создан. Идеально, я хотел бы смочь сказать 'ld' статически связываться так, как он может и заменять к библиотеке общего объекта, если статическая библиотека не может быть найдена.

В interium я попробовал что-то как gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe в надеждах, что 'ld' статически связались бы в lib1 и lib2, но только имели бы зависимость во время выполнения от lib3rdparty. Unfortunatly, это не работало, как я предназначил; вместо этого -shared флаг перезаписал -static флаг и все были скомпилированы как общие объекты.

Статически связывает бескомпромиссное соглашение или там некоторый способ, которым я могу смешивание и подгонка?

52
задан SiegeX 1 June 2010 в 14:09
поделиться

1 ответ

Посмотрев на эту тему, вы увидите, что это можно сделать. Ребята из GNU предлагают

gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe
64
ответ дан 7 November 2019 в 09:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: