使用Boost.Python和静态库构建

时间:2013-04-21 18:36:37

标签: c++ python boost compilation compiler-errors

我想制作一个可以处理python插件的C ++应用程序,所以我要进入boost.python。我正在创建一些我用CMake构建的测试程序。

在我的测试程序中,我有一个简单的“库”,提出了一个插件接口(使用boost.python将其暴露给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创建程序?

谢谢, 丹尼斯。

1 个答案:

答案 0 :(得分:0)

我尝试从文件(GLOB ...)命令中删除core / * .h 无需编译头文件,这实际上可能导致重复符号的问题。