CodeBlocks не может найти общие библиотеки, даже если настроены пути поиска

У меня есть очень простой проект C++ в блоках кода, который использует glfw.so и две другие библиотеки, которые скомпилированы в файлы .so из другого проекта, libHorde3D.so и libHorde3DUtils.so. Последние лежат в корневой папке проекта, а glfw где-то у меня в /usr/lib (кажется).

Я добавил папку проекта в пути поиска компоновщика и компилятора в блоках кода. Я добавил libHorde3D.so и libHorde3DUtils.so, а также glfw.so в библиотеки ссылок на вкладке настроек компоновщика. Я подумал, что этого будет достаточно, основываясь на предыдущих подобных вопросах здесь, в stackoverflow.

Однако, когда я нажимаю сборку:

ld cannot find -lHorde3D.so
ld cannot find -lHorde3DUtils.so
ld cannot find -lglfw.so

Моя система — Arch Linux 64, и я использую GCC. Я также безуспешно пытался копировать libHorde3D.so и libHorde3DUtils.so в /usr/lib и /usr/lib64.

P.S. Все пути поиска копируются в цели отладки и выпуска.


person Kiril    schedule 24.07.2012    source источник
comment
вы не должны ставить .so в качестве флага компоновщика. используйте его как -library..   -  person Aftnix    schedule 24.07.2012
comment
Примечание: установите параметр CodeBlocks для отображения полной командной строки во время сборки проекта, это помогает решить такие проблемы.   -  person Alex F    schedule 24.07.2012


Ответы (2)


Скажем, если имя библиотеки libmylibrary.so, то параметр компоновщика для ссылки на эту библиотеку будет выглядеть как -lmylibrary. Обратите внимание, что префикса lib и суффикса .so здесь нет — они добавляются компоновщиком автоматически. В вашем случае кажется, что вы указали неправильное имя. Попробуйте удалить из него .so, это должно решить проблему.

Вот простая демонстрация того, как вызвать сбой, совершив аналогичную ошибку:

$ echo 'int main() { return 0; }' > test.c
$ gcc -o test ./test.c -lc
$ gcc -o test ./test.c -lc.so
/usr/bin/ld: cannot find -lc.so
collect2: ld returned 1 exit status
$ 

Первая команда выполнена успешно, а вторая (с неверным именем библиотеки) завершается ошибкой.

person Community    schedule 24.07.2012
comment
Оба ответа верны и исправили мою глупую ошибку. Спасибо! - person Kiril; 24.07.2012

Вы не должны передавать ".so". Параметры компоновщика

-lHorde3D -lHorde3DUtils -lglfw

Таким образом, компоновщик будет искать «libHorde3D.so» и т. д. в путях к библиотеке.

person steffen    schedule 24.07.2012