简体   繁体   English

与boost-python链接会在PyCEGUI中产生未定义的引用

[英]Linking against boost-python yields undefined references in PyCEGUI

I am trying to compile a Python library (CEGUI can build Python modules, its editor relies on that) that needs to link against boost-python. 我正在尝试编译需要链接到boost-python的Python (CEGUI可以构建Python模块,其编辑器依赖于此)。 So I built boost, with --with-python and it built just fine. 所以我用--with-python构建了boost,它构建得很好。

However, as soon as the .pyd is linked, I get undefined references: 但是,一旦链接了.pyd,我将获得未定义的引用:

Linking CXX shared module ..\..\..\..\..\bin\PyCEGUI.pyd
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x97): undefined reference to `_imp___ZN5boost6python7objects10class_baseC2EPKcjPKNS0_9type_infoES4_'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x9c): undefined reference to `_imp___ZN5boost6python9converter8registry6insertEPFPvP7_objectEPFvS5_PNS1_30rvalue_from_python_stage1_dataEENS0_9type_infoEPFPK11_typeobjectvE
'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0xcc): undefined reference to `_imp___ZN5boost6python7objects23register_dynamic_id_auxENS0_9type_infoEPFSt4pairIPvS2_ES4_E'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0xf4): undefined reference to `_imp___ZN5boost6python7objects8add_castENS0_9type_infoES2_PFPvS3_Eb'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x1cd): undefined reference to `_imp___ZN5boost6python7objects17copy_class_objectERKNS0_9type_infoES4_'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x20d): undefined reference to `_imp___ZN5boost6python9converter8registry6insertEPFP7_objectPKvENS0_9type_infoEPFPK11_typeobjectvE'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x245): undefined reference to `_imp___ZN5boost6python7objects10class_base17set_instance_sizeEj'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x281): undefined reference to `_imp___ZN5boost6python7objects15function_objectERKNS1_11py_functionERKSt4pairIPKNS0_6detail7keywordES9_E'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x2f2): undefined reference to `_imp___ZN5boost6python7objects16add_to_namespaceERKNS0_3api6objectEPKcS5_S7_'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x348): undefined reference to `_imp___ZN5boost6python6detail13current_scopeE'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x4d1): undefined reference to `_imp___ZN5boost6python9converter8registry9push_backEPFPvP7_objectEPFvS5_PNS1_30rvalue_from_python_stage1_dataEENS0_9type_infoEPFPK11_typeobjectvE'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x636): undefined reference to `_imp___ZN5boost6python7objects16add_to_namespaceERKNS0_3api6objectEPKcS5_'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x1246): undefined reference to `_imp___ZN5boost6python6detail13current_scopeE'
CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):AbsoluteDim.pypp.cpp:(.text+0x1267): undefined reference to `_imp___ZN5boost6python6detail13current_scopeE'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: CMakeFiles\PyCEGUI.dir/objects.a(AbsoluteDim.pypp.cpp.obj):
bad reloc address 0x2 in section `.text$_ZN5boost6detail15sp_counted_baseD1Ev[__ZN5boost6detail15sp_counted_baseD1Ev]'
collect2.exe: error: ld returned 1 exit status
cegui\src\ScriptModules\Python\bindings\CMakeFiles\PyCEGUI.dir\build.make:6698: recipe for target 'bin/PyCEGUI.pyd' failed
mingw32-make[2]: *** [bin/PyCEGUI.pyd] Error 1
CMakeFiles\Makefile2:726: recipe for target 'cegui/src/ScriptModules/Python/bindings/CMakeFiles/PyCEGUI.dir/all' failed
mingw32-make[1]: *** [cegui/src/ScriptModules/Python/bindings/CMakeFiles/PyCEGUI.dir/all] Error 2
Makefile:135: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

My first assumption was that it does not link against boost-python, but the link.txt inside the CMake folders shows this: 我的第一个假设是它不针对boost-python进行链接,但是CMake文件夹中的link.txt显示如下:

"C:\\Coding\\CMake 2.8\\bin\\cmake.exe" -E remove -f CMakeFiles\\PyCEGUI.dir/objects.a C:\\MinGW\\bin\\ar.exe cr CMakeFiles\\PyCEGUI.dir/objects.a @CMakeFiles\\PyCEGUI.dir\\objects1.rsp C:\\MinGW\\bin\\g++.exe -shared -o ..........\\bin\\PyCEGUI.pyd -Wl,--major-image-version,0,--minor-image-version,0 -Wl,--whole-archive CMakeFiles\\PyCEGUI.dir/objects.a -Wl,--no-whole-archive ..........\\lib\\libCEGUIBase-0.dll.a C:\\Coding\\boost_1_53_0\\lib\\libboost_python-mgw48-mt-1_53.a C:\\Python27\\libs\\python27.lib C:\\Coding\\CEGUI\\cegui\\dependencies\\lib\\dynamic\\libfreetype.dll.a C:\\Coding\\CEGUI\\cegui\\dependencies\\lib\\dynamic\\libpcre.dll.a -lwinmm -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 “ C:\\ Coding \\ CMake 2.8 \\ bin \\ cmake.exe” -E删除-f CMakeFiles \\ PyCEGUI.dir / objects.a C:\\ MinGW \\ bin \\ ar.exe cr CMakeFiles \\ PyCEGUI.dir / objects.a @ CMakeFiles \\ PyCEGUI.dir \\ objects1.rsp C:\\ MinGW \\ bin \\ g ++。exe -shared -o .......... \\ bin \\ PyCEGUI.pyd -Wl,-major-image-version, 0,-minor-image-version,0 -Wl,-整个存档CMakeFiles \\ PyCEGUI.dir / objects.a -Wl,-no-whole-archive .......... \\ lib \\ libCEGUIBase-0.dll.a C:\\ Coding \\ boost_1_53_0 \\ lib \\ libboost_python-mgw48-mt-1_53.a C:\\ Python27 \\ libs \\ python27.lib C:\\ Coding \\ CEGUI \\ cegui \\ dependencies \\ lib \\ dynamic \\ libfreetype.dll.a C:\\ Coding \\ CEGUI \\ cegui \\ dependencies \\ lib \\ dynamic \\ libpcre.dll.a -lwinmm -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32

So boost-python is linked against. 因此boost-python是与之相关的。 I am unsure what could be the problem here. 我不确定这里可能是什么问题。 Boost? 促进? CEGUI? CEGUI? MinGW?... MinGW的?...

Turns out, the problem was that I was using the 64bit version of Python. 原来,问题是我使用的是64位版本的Python。 I downloaded it months ago and just forgot about that little fact. 我几个月前下载了它,却忘了这个小事实。

Now, MinGW can only compile and use 32 bit libraries, not mix in 64 bit. 现在,MinGW只能编译和使用32位库,而不能混入64位。 This is what led to boost-python not compiling correctly (it's a wonder it did compile at all) and thus having undefined references when linked against. 这就是导致boost-python无法正确编译的原因(这是一个奇迹,它确实编译了),因此在链接时具有未定义的引用。

Downloading the 32bit version of Python and recompiling boost solved the problems. 下载32位版本的Python并重新编译boost解决了这些问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM