Python和C 集成.与动态库的问题
Python and C++ integration.Problems with dynamic library
我使用swig。(Mac OS 10.13)
我的外壳脚本:
swig -c++ -python -o example_wrap.cpp example.i
g++ -c -std=c++17 -fPIC example.cpp
g++ -c -std=c++17 -fPIC example_wrap.cpp -o example_wrap.o
-I/usr/local/Cellar//python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/include/python3.7m
ld -bundle -macosx_version_min 10.13 -flat_namespace
-undefined suppress -o _example.so *.o
我花了足够的时间来寻找如何为Python创建C 动态库,但是我从未使用过最后一行。通常,我经常从IDE创建一个库。 g++ -shared
更熟悉,但行不通。出现了许多这样的错误:
Undefined symbols for architecture x86_64:
"_PyArg_ParseTuple", referenced from:
_wrap_printTree(_object*, _object*) in example_wrap.o
我从python.h知道这种方法。因此,问题是 - 最后一行如何工作(ld -bundle ...
)?还有其他方法可以创建动态库吗?如何使用g++ -shared
?
这是一个小的CMakeLists.txt
,应该在您发布的示例中使用:
cmake_minimum_required(VERSION 3.10) # change this to your needs
project(foo VERSION 0.0 LANGUAGES CXX C)
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 "")
add_library(exampleImpl SHARED example.h example.cpp)
target_compile_features(exampleImpl PUBLIC cxx_std_17)
set_source_files_properties(example.i PROPERTIES CPLUSPLUS ON)
swig_add_library(example LANGUAGE python SOURCES example.i)
swig_link_libraries(example ${PYTHON_LIBRARIES} exampleImpl)
要确保cmake
使用正确的Python库,您可以在配置时间时通过适当的选项,请参阅此处。
相关文章:
- 在c++中使用动态分配的问题
- 动态类的分段错误(家庭作业问题)
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 此动态编程问题的自上而下方法
- 带有模板问题的指针的动态数组
- 如何解决动态规划问题?
- 动态规划中的旅行推销员问题
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 寻找解决这个动态编程问题的提示
- 寻找最小楼梯成本的动态规划问题的错误答案
- C++ push() 和 pop() 方法使用指针的动态 LinkedList 的问题
- 指向动态内存中结构中的变量时出现问题
- 我正在尝试使用回溯来解决 N queen 问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
- 在C 中动态分配的内存的问题
- 如何通过动态规划方法解决这个问题?
- 我的C++程序有问题.涉及动态调整整数数组的大小
- "Error reading character of string" 为哈希动态增长数组的问题 (C++)
- 如何解决在使用动态 2D 数组进行矩阵乘法的 MPI 进行并行编程时的问题
- 使用动态布尔数组时出现问题
- BOOST-ASIO ASYNC_RECEIVE_FROM功能超载问题( 动态指针)