【发布时间】:2019-07-10 09:21:03
【问题描述】:
我使用 Swig。(Mac os 10.13)
我的 shell 脚本:
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?
【问题讨论】:
-
我不想手动调用链接器,这容易出错且复杂。也许改用
cmake,它对swig绑定有很好的支持。此外,您需要链接到 python 库,例如-lpython3.7或类似的东西。 -
我知道
cmake。这可能没有意义,但我想了解如果我手动创建它是如何工作的。 -
@lubgr,如果你知道关于 cmake + swig 的好消息,可以发一下吗没有例子:(
标签: python c++ dynamic-library language-interoperability