Неопределенная ссылка на символ, даже если библиотека связана

При связывании проекта, над которым я работаю, компоновщик выдает следующие ошибки:

/usr/bin/ld: ../Includes and Libs/lib/libsfml21rca.a(SoundFile.o): undefined reference to symbol 'sf_read_short@@libsndfile.so.1.0'

/usr/bin/ld: note: 'sf_read_short@@libsndfile.so.1.0' is defined in DSO /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libsndfile.so so try adding it to the linker command line

/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libsndfile.so: could not read symbols: Invalid operation

Дело в том, что libsndfile.so уже связан с libsfml21rca.a, поэтому я не знаю, в чем проблема.

Я использую Code::Blocks 10.05

Спасибо за помощь заранее

РЕДАКТИРОВАТЬ:

Вот команда связывания:

g ++ -L "Включает и Libs / lib" -L "Включает и Libs/lib/raknet3_731" -L"включает и Libs/lib/d3d_new/x86" -L"Включает и Libs / lib / ogg" -L "включает и Libs/lib/sdl" -LBullet/lib -o (имя файла) ...(множество объектных файлов) -lGLEW -lglfw -lGL -lGLU -lpthread -lopenal -ljpeg -lfreetype -lsndfile -lXrandr -lsfml-system -lsfml-window -lsfml-audio ../Bullet/lib/LinearMath.lib ../Bullet/lib/BulletCollision.lib ../Bullet/lib/BulletDynamics.lib "../Включает и Libs/lib/raknet3_731/RakNetLibStaticDebug.lib" "../Includes и Libs/lib/libsfml21rca.a" ../../../../../../home/msabol/Desktop/SFML/sfml2st/sfmlVideo/sfmlVideo/bin/Release/libsfmlVideo.a ../../../../../../home/msabol/Desktop/SFML/sfmlVideo/bin/Release/libsfmlVideo.a

1 ответ

Решение

Компоновщик запускает только один проход по файлам библиотеки. Так что если у вас есть что-то в библиотеке A, что нужно в библиотеке B, вам нужно иметь g++ objects... -llibA -llibB, если вы используете g++ objects... -llibB -llibA это не получится так, как вы показываете.

Итак, в вашем случае, положить -lsndfile после "../Includes and Libs/lib/libsfml21rca.a",

(И чья это была идея поместить пробелы в каталог "Includes and Libs" - не лучшая идея, которую я видел...)

Другие вопросы по тегам