У меня есть проект C, который производит десять исполняемых файлов, все из которых я хотел бы связать статически. Проблема, с которой я сталкиваюсь, состоит в том, что один из этих исполняемых файлов использует стороннюю библиотеку, для которой доступна только версия общего объекта.
Если я передам флаг -static
в gcc, ld выдаст ошибку, сообщив, что не может найти нужную библиотеку (я предполагаю, что она ищет версию .a), и исполняемый файл не будет собран. В идеале я хотел бы иметь возможность указывать 'ld' статически связываться как можно чаще и переключаться на библиотеку общих объектов, если статическая библиотека не может быть найдена.
В interium я пробовал что-то вроде gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe
в надежде, что 'ld' будет статически связываться в lib1 и lib2, но будет зависеть только от времени исполнения lib3rdparty. К сожалению, это не сработало, как я хотел; вместо этого флаг -shared
перезаписал флаг -static
, и все было скомпилировано как разделяемые объекты.
Статически связывает сделку "все или ничего", или есть какой-то способ, которым я могу смешивать и сопоставлять?