2013-04-21 2 views
0

Я хочу создать приложение на C++, которое может обрабатывать плагины python, поэтому я попадаю в boost.python. Я создаю несколько тестовых программ, которые я создаю с помощью CMake.Здание с Boost.Python и статические библиотеки

В моей тестовой программе у меня есть простая «библиотека», предлагающая интерфейс плагина (с использованием 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 без использования разделяемых библиотек?

Thanks, Denis.

ответ

0

Я бы попытался удалить ядро ​​/ *. H из файла (GLOB ...) command Файлы заголовков не подлежат компиляции, и это может фактически вызвать проблему дублирования символов.

+0

Я пробовал, но у меня был тот же результат: / – DenisB

Смежные вопросы