gpt4 book ai didi

python - SWIG Python 绑定(bind)似乎是空的

转载 作者:行者123 更新时间:2023-11-30 03:36:35 24 4
gpt4 key购买 nike

我有以下文件用于使用 SWIG 和 CMake 生成到 C++ 项目的 Python 绑定(bind):

测试.h

int add(int a, int b);

测试.cpp

int add(int a, int b)
{
return a+b;
}

测试.i

%module test
%{
#include "test.h"
%}

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
project(swig-test)

# This is a CMake example for Python

add_library(testcpp SHARED test.cpp)

FIND_PACKAGE(SWIG REQUIRED)
INCLUDE(${SWIG_USE_FILE})

FIND_PACKAGE(PythonLibs)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

SET(CMAKE_SWIG_FLAGS "")

SET_SOURCE_FILES_PROPERTIES(test.i PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(test.i PROPERTIES SWIG_FLAGS "-includeall")
set(${CMAKE_CXX_FLAGS} "${CMAKE_CXX_FLAGS} -fPIC")
SWIG_ADD_MODULE(test python test.i)
SWIG_LINK_LIBRARIES(test testcpp)

它编译成功并创建了libtestcpp.so_test.sotest.pystrings libtestcpp.sostrings _test.so 都有一个条目 _Z3addii 并且 import test 在 Python 中工作,但是Python 中的 test 命名空间下没有任何内容。

我也试过手动编译

swig -c++ -python test.i
g++ -c -fpic test.cpp test_wrap.cxx -I/usr/include/python2.7 -I.
g++ -shared test.o test_wrap.o -o _test.so

同样的结果。

注意 import test 不是完全空模块可能很有用; 导入测试;目录(测试) 产量

['__builtin__',
'__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'_newclass',
'_object',
'_swig_getattr',
'_swig_property',
'_swig_repr',
'_swig_setattr',
'_swig_setattr_nondynamic',
'_test']

导入测试; help(test) 有一个描述,它是由 SWIG 创建的。

最佳答案

你需要在test.i的末尾添加一行%include "test.h"

%module test
%{
#include "test.h"
%}

%include "test.h"

关于python - SWIG Python 绑定(bind)似乎是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40598298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com