Я пытаюсь построить проект, который зависит от двоичных распределенных статических библиотек.
Компоновщик жалуется, что не может найти ini_config
функций, среди прочего:
config_params.c:(.text+0x16f): undefined reference to `ini_get_config_valueobj'
Он находит динамические библиотеки, но не статическую версию:
attempt to open /usr/lib/gcc/x86_64-linux-gnu/7/libini_config.a failed
attempt to open /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libini_config.so succeeded
присутствует на Debian Strech. Есть ли способ получить их на Ubuntu?
Все пакеты, похоже, устанавливают свои статические библиотеки. Их можно найти в /usr/lib/x86_64-linux-gnu/
.
По-видимому, компоновщик первым выбирает динамические библиотеки при использовании -lsomelib
. Чтобы переопределить это, вы можете использовать -l:somelib.a
, тогда оно будет соответствовать только точному имени файла somelib.a
.
Чтобы отладить фазу поиска в библиотеке, вы можете добавить -Wl,--versbose
к вашим LDFLAGS, gcc отобразит каждый путь, который он пытается для ваших опций -lXXX
.
Имейте в виду, что архивы проверяются только один раз, как указано в этого ответа , если некоторые символы все еще не найдены, возможно, вам придется изменить порядок параметров.