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