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