У меня есть проект 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
флаг и все были скомпилированы как общие объекты.
Статически связывает бескомпромиссное соглашение или там некоторый способ, которым я могу смешивание и подгонка?
Посмотрев на эту тему, вы увидите, что это можно сделать. Ребята из GNU предлагают
gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe