2013-04-21 62 views
0

我想制作一个可以处理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编写程序而不使用共享库?

谢谢, 丹尼斯。

回答

0

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

+0

我试过了,但是我得到了相同的结果:/ – DenisB 2013-04-23 10:14:27