【问题标题】:Undefined reference to symbol, even though the library is linked对符号的未定义引用,即使库已链接
【发布时间】:2023-03-20 08:07:01
【问题描述】:

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

/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"包含和库/lib" -L"包含和库/lib/raknet3_731" -L"包含和库/lib/d3d_new/x86" -L"包含和库/lib/ogg" -L “包含和库/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 "../Includes 和 Libs/lib /raknet3_731/RakNetLibStaticDebug.lib" "../Includes and Libs/lib/libsfml21rca.a" ../../../../../../home/msabol/Desktop/SFML/sfml2st/sfmlVideo /sfmlVideo/bin/Release/libsfmlVideo.a ../../../../../../home/msabol/Desktop/SFML/sfmlVideo/bin/Release/libsfmlVideo.a

【问题讨论】:

  • 尝试更改链接顺序?
  • 我应该如何改变它?一切都以正确的顺序链接,或者至少看起来如此。
  • 添加命令 C::B 用于链接到您的问题。 (请勿将其添加为评论!)
  • @H2CO3 我会记住这一点的。

标签: c++ linker codeblocks


【解决方案1】:

链接器只对库文件运行一次。因此,如果您在库 A 中有一些东西需要在库 B 中使用,您需要有 g++ objects... -llibA -llibB,如果您使用 g++ objects... -llibB -llibA,它将以您显示的方式失败。

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

(谁的想法是将空格放在“Includes and Libs”目录中 - 这不是我见过的最好的想法......)

【讨论】:

  • 我会试一试。在我的辩护中,我几天前加入了这个项目,所以所有可怕的名字(还有更多)不是我制造的。 编辑:该死的,它奏效了!谢谢你,马茨·彼得森。
  • @Mats 坦率地说,我发现单次通过库更令人反感。由于ld链接器的限制,有无数像OP这样的问题。例如,微软的LINK 工具就没有这个问题。 Embarcadero 的 ilinker 也没有。
  • @greatwolf 不幸的是,我的工作是让项目在 Unix 平台上运行。微软的LINK 就这么多。
  • 它是开源的,我相信补丁会受到欢迎......虽然我怀疑这会在某处破坏 - 或者至少如果它真的很容易修复而没有缺点,有人会修好了。
猜你喜欢
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2014-06-26
  • 2011-12-08
  • 2015-05-25
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多