使用Boost.Python和静态库构建
问题描述:
我想制作一个可以处理python插件的C++应用程序,所以我正在进入boost.python。我正在创建一些我使用CMake构建的测试程序。在我的测试程序中,我有一个简单的“库”,它提出了一个插件接口(使用boost.python将它暴露给python)和一个插件加载器(没有编码,里面没有任何东西)。使用Boost.Python和静态库构建
当我试图直接建立我的可执行文件(没有任何库),我得到一个链接错误(模块我已经暴露被称为pythonPlugin):
duplicate symbol _initpythonPlugin in:
CMakeFiles/pythonPluginer.dir/main.cpp.o
libcoreLib.a(PluginLoader.cpp.o)
duplicate symbol __Z24init_module_pythonPluginv in:
CMakeFiles/pythonPluginer.dir/main.cpp.o
libcoreLib.a(PluginLoader.cpp.o)
我有同样的结果,当我建立一个中间静态库。但是,当我将这个库变成共享库时,这可以正常工作。这里是一个子CMakeList.txt:
file(GLOB sources core/*.h core/*.cpp)
add_library(coreLib SHARED ${sources})
target_link_libraries(coreLib
${PYTHON_LIBRARIES}
${Boost_LIBRARIES})
add_executable(pythonPluginer main.cpp)
target_link_libraries(pythonPluginer
coreLib)
你有什么解释吗?是否有可能使用boost/python编写程序而不使用共享库?
谢谢, 丹尼斯。
答
我试着从文件(GLOB ...)中删除core/*。h命令 头文件不需要编译,这实际上可能会导致重复符号的问题。
我试过了,但是我得到了相同的结果:/ – DenisB 2013-04-23 10:14:27