Доброе утро, все,CMake, SWIG & общая библиотека
Я связываюсь с вами, потому что у меня проблема. Я использую CMake для компиляции и сборки динамической библиотеки C++/C# оболочки SWIG. Эта оболочка позволяет мне использовать DLL C++ с программой выполнения C#.
Я хотел бы быть готовым запустить CTEST в своей библиотеке, чтобы убедиться, что у меня нет ошибок. Проблема с библиотекой «Windows» заключается в том, что вам нужно экспортировать символ, чтобы использовать его. С обычной библиотеки, я добавлю команду «Shared» в «add_library»:
add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS})
Но чтобы построить библиотеку бросил SWIG мне нужно использовать «SWIG_ADD_MODULE», который не знает команду «СОВМЕСТНОЕ ».
Единственное решение, которое я нашел еще, это создать две библиотеки. Один строит SWIG и используется кодом C#. Вторая сборка обычно с «add_library» и используется моей программой CTEST. Это мой CMakeList:
###############################
# SWIG LYBRARY
###############################
include(GenerateExportHeader)
SET (MODULE_NAME Mylib)
SET (INTERFACE_FILES Mylib.i)
FIND_PACKAGE(SWIG REQUIRED)
INCLUDE(${SWIG_USE_FILE})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
# call swig as: 'swig -csharp -c++ -outdir XXX'
SET_SOURCE_FILES_PROPERTIES(${INTERFACE_FILES} PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(${INTERFACE_FILES} PROPERTIES SWIG_FLAGS "-includeall")
SWIG_ADD_MODULE(${MODULE_NAME} csharp ${INTERFACE_FILES} ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS})
SWIG_LINK_LIBRARIES(${MODULE_NAME} ${CSHARP_LIBRARIES})
###############################
# DYNAMIC LYBRARY
###############################
add_library(${PROJECT_NAME}Tester SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS})
generate_export_header(${PROJECT_NAME}Tester EXPORT_MACRO_NAME OTHER_NAME_EXPORT)
Я хотел бы найти способ, чтобы построить только один и пригодны для использования обоих. Спасибо за вашу помощь и иметь хороший уик-энд, Климент
Я столкнулся с той же проблемой, и в итоге у меня были две библиотеки, а не одна. Он имеет преимущество перед наличием многофункционального устройства: с помощью SWIG вы можете создавать множество оберток для многих языков. В конце концов, я предпочел иметь одну библиотеку-оболочку для каждого языка, так как вам нужны символы C#, только если вы используете оболочку C#, символы python, если используете оболочку python и т. Д. И т. Д. Итак, если, например, ваша библиотека C++ полезна многим людям , они (или вы) можете просто написать новый модуль-оболочку, вместо того, чтобы перекомпилировать все, и сохранить основную библиотеку отделенной и независимой от оболочек. – fedino
То же самое здесь, полностью согласен с @fedino, это предпочтительный подход – Schollii