我试图用CWIG方法(SigiguAddLoad,Link库)为SIP提供C++共享库的Python绑定。你知道吗
所有的头文件只包含在一个mymodule.i文件中。你知道吗
在Ubuntu上一切正常,所有的类和方法都正确生成。你知道吗
在Windows上(使用MSVC和MinGW编译器)不会生成类。你知道吗
我试图将%include<;windows.I>;添加到mymodule.I接口文件,但它没有更改任何内容。在某个时刻,我试图设置cmake策略CMP0078(但它对此没有任何影响)。你知道吗
我在Windows上得到了.pyd文件,但它没有正确生成。不知道编译器之间有什么区别-或者我遗漏了什么小东西。你知道吗
例如,我们有: 类设备: 方法:getName() getDescription() 类缓冲区: 方法:getLength() 设置长度(int)
编译之后,如果我们在Ubuntu中使用python帮助(模块/类)功能,我们将得到预期的结构:
help(mymodule)
NAME mymodule
CLASSES Device Buffer etc.
help(Device)
class Device(object):
Methods:
getName(...)
getDescription(...)
etc..
但是,在Windows上:
help(mymodule)
NAME mymodule
FUNCTIONS Device_getName(...)
Device_getDescription(...)
Buffer_getLength(...)
etc
help(any Device/Buffer object)
class SwigPyObject(object)
none of the defined methods are in here
SWIG在Linux和Windows上是否有调用/命名约定?为什么所有的方法名都以类名为前缀?你知道吗
编辑:
这是cmake配置:
FIND_PACKAGE(SWIG REQUIRED)
include(UseSWIG)
FIND_PACKAGE(PythonLibs)
find_package(PythonInterp REQUIRED)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}
${CMAKE_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR})
SET(CMAKE_SWIG_FLAGS "")
SET_SOURCE_FILES_PROPERTIES(${PROJECT_NAME}.i PROPERTIES CPLUSPLUS ON)
set(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_property(SOURCE ${PROJECT_NAME}.i PROPERTY SWIG_MODULE_NAME "libm2k")
SWIG_ADD_LIBRARY(${PROJECT_NAME} TYPE SHARED LANGUAGE python SOURCES ${PROJECT_NAME}.i)
target_include_directories(_${PROJECT_NAME} PRIVATE
${PYTHON_INCLUDE_DIRS}
${CMAKE_SOURCE_DIR}/include)
target_link_libraries(_${PROJECT_NAME} ${PROJECT_NAME} ${PYTHON_LIBRARIES})
这是库导出配置:
#ifdef _WIN32
#ifdef LIBM2K_EXPORTS
#define LIBM2K_API __declspec(dllexport)
#else
#define LIBM2K_API __declspec(dllimport)
#endif
#else
#define LIBM2K_API __attribute__((visibility ("default")))
#endif
目前没有回答
相关问题 更多 >
编程相关推荐