2013-04-21 64 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