【问题标题】:Undefined reference but (dynamic) library is linked. (possibly bad reloc address error)未定义的引用,但(动态)库已链接。 (可能是错误的重定位地址错误)
【发布时间】:2014-09-03 19:21:53
【问题描述】:

我一直在尝试在 window 上编译 OpenVDB,但是我遇到了一种我以前没有遇到过的错误

这是导致错误的命令(由 cmake 和 make 生成):

C:\mingw\bin\g++.exe     -shared -o libopenvdb.dll -Wl,--out-implib,libopenvdb.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -Wl,--whole-archive CMakeFiles\openvdb.dir/objects.a -Wl,--no-whole-archive  -LC:\mingw\install C:\mingw\install\lib\Half.lib C:\mingw\install\lib\libzlib.dll -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 
CMakeFiles\openvdb.dir/objects.a(Grid.cc.obj):Grid.cc:(.text$_ZN4halfC2Ef[__ZN4halfC2Ef]+0x70): undefined reference to `half::_eLut'
CMakeFiles\openvdb.dir/objects.a(Grid.cc.obj):Grid.cc:(.text$_ZN4halfC2Ef[__ZN4halfC2Ef]+0xb5): undefined reference to `half::convert(int)'
c:/mingw/bin/../lib/gcc/i686-w64-mingw32/4.7.3/../../../../i686-w64-mingw32/bin/ld.exe: CMakeFiles\openvdb.dir/objects.a(Grid.cc.obj): bad reloc address 0xb5 in section `.text$_ZN4halfC2Ef[__ZN4halfC2Ef]'

未定义的引用,但正在链接 Half.lib。

我在 lib 文件上运行了 dumpbin 以检查丢失的项目是否存在并且它们确实存在:http://pastebin.com/6JjhGyky

我尝试查看其他堆栈溢出帖子并搜索了具有类似描述的问题,但它们似乎与我的问题没有足够的相关性以提供帮助。

我不确定我以前是否见过“bad realoc address”错误,这可能是我问题的关键,但谷歌搜索让我对它的确切含义知之甚少。

感谢任何有关我的问题所在的建议!

【问题讨论】:

  • half::convert(int)的情况下,看起来符号是private,而不是publicSymbol name : ?convert@half@@CAFH@Z (private: static short __cdecl half::convert(int))
  • 这确实很奇怪,也适用于 _eLut 变量!考虑到界面和使用文件都是知名库的一部分,尤其是奇怪的,也许我弄混了一些版本控制。你知道这个错误是否是由这个引起的吗?编译器不会知道这是一个访问问题并给出更准确的错误消息吗?
  • 另外值得注意的是,Grid.cc 不使用任何“convert”或“_eLut”,因此错误可能是由于它包含像 Half.h 这样的头文件,然后引用该函数和变量并导致错误?
  • 我认为我的问题可能是由于将 MSCV 库用于 mingw 项目。我当时没有意识到情况是这样的。

标签: c++ linker


【解决方案1】:

我认为我的问题可能是由于将 MSCV 库用于 mingw 项目。没想到是这样的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 2020-08-10
    • 2015-12-16
    • 2015-01-23
    • 2016-11-17
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多