Могу ли я смешивать статические и общедоступные библиотеки при связывании?

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

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

В interium я попробовал что-то вроде gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe в надежде, что ‘ld’ будет статически связываться в lib1 и lib2, но будет иметь только зависимость от lib3rdparty. К несчастью, это не сработало, как я предполагал; вместо этого флаг -shared -sharedстатический флаг, и все было скомпилировано как shared-objects.

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

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

 gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe 
  • вызов нестатического метода в статическом методе в Java
  • Как обслуживать статические файлы из другого каталога, чем статический путь?
  • Создание объектов: конструкторы или статические заводские методы
  • Статический и глобальный
  • Почему при вызове (статического) метода в нулевой ссылке не выбрасывается исключение NullPointerException?
  • Является ли порядок инициализации статического classа в C # детерминированным?
  • Использование инициализаторов и конструкторов в Java
  • Почему статические поля не инициализируются во времени?
  • Вызывает статические методы через объект «плохая форма»? Зачем?
  • Поведение статических блоков с наследованием
  • C # static member "inheritance" - почему это вообще существует?
  • Давайте будем гением компьютера.