首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake、SWIG和共享库

CMake、SWIG和共享库
EN

Stack Overflow用户
提问于 2016-10-14 08:05:21
回答 1查看 1.1K关注 0票数 1

大家早上好,

我联系你是因为我被困在一个问题上。我正在使用CMake编译和构建一个SWIG包装器C++/C#动态库。这个包装器允许我使用DLL C++和一个C#执行程序。

我想在我的库上启动CTEST以验证我没有错误。"Windows“库的问题是您需要导出符号才能使用它。使用通常的库,我将把命令"SHARED“添加到"add_library”中:

代码语言:javascript
复制
add_library( ${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS} )

但是要构建抛出的库,我需要使用"SWIG_ADD_MODULE“,它不知道命令”共享“。

我找到的唯一解决方案是创建两个库。一个是通过SWIG构建的,然后由C#代码使用。第二个版本通常使用"add_library“,并由我的CTEST程序使用。这是我的CMakeList:

代码语言:javascript
复制
###############################
# 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)

我希望我能找到一种方法,只建造一个,并可供两者使用。谢谢你的帮助,祝你周末愉快,克莱门特

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-10 15:53:48

@fedino @Scollii感谢您的回答,最后,我通过在CMake中创建一个宏来解决我的问题,该宏对swig命令的*.o进行了填充,并将其返回到"add_library“中。有了这个解决方案,我就有了一个真正的共享库,可以用于我的测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40038063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档