未定义的符号引用,即使库已链接

时间:2013-07-19 08:39:25

标签: c++ linker codeblocks

链接我正在处理的项目时,链接器会出现以下错误:

/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 “Includes和Libs / lib / sdl”-LBullet / lib -o(filename)...(很多目标文件)-lGLEW -lglfw -lGL -lGLU -lpthread -lopenal -ljpeg -lfreetype -lsndfile -lXrandr - lsfml系统-lsfml窗口-lsfml音频../Bullet/lib/LinearMath.lib ../Bullet/lib/BulletCollision.lib ../Bullet/lib/BulletDynamics.lib” ../Includes和利布斯/ lib中/raknet3_731/RakNetLibStaticDebug.lib” “../Includes和库/ lib目录/ libsfml21rca.a” ../../../../../../home/msabol/Desktop/SFML/sfml2st/sfmlVideo /sfmlVideo/bin/Release/libsfmlVideo.a ../../../../../../home/msabol/Desktop/SFML/sfmlVideo/bin/Release/libsfmlVideo.a

1 个答案:

答案 0 :(得分:8)

链接器仅对库文件运行一次传递。因此,如果图书馆A中的某些内容需要图书馆B中的内容,则需要g++ objects... -llibA -llibB,如果您使用g++ objects... -llibB -llibA,它将以您展示的方式失败。

因此,在您的情况下,请将-lsndfile放在"../Includes and Libs/lib/libsfml21rca.a"之后。

(他的想法是将空格放在“包含和库”目录中 - 这不是我见过的最好的主意......)