%module position
%include global.i
%{
#include "pos.h"
%}
%include "pos.h"
%include "global.h"
... (functions declared)
原型
我就这样做。在
swig -c++ -python -builtin position.i
g++ -O2 -fPIC -c position.cpp
g++ -O2 -fPIC -c -I/Users/aaron/anaconda/include/python3.5m position_wrap.cxx
我有两个目标文件,然后用
g++ -dynamiclib -lpython position.o global.o position_wrap.o -o _position.so
我试过很多不同的方法来做这件事,在仔细研读后,我已经完全窒息了。在
我有个错误
...
"_PyUnicode_FromFormat", referenced from:
SwigPyObject_repr(SwigPyObject*) in position_wrap.o
SwigPyPacked_repr(SwigPyPacked*) in position_wrap.o
SwigPyPacked_str(SwigPyPacked*) in position_wrap.o
"_PyUnicode_FromString", referenced from:
_PyInit__position in position_wrap.o
SWIG_Python_DestroyModule(_object*) in position_wrap.o
SwigPyPacked_str(SwigPyPacked*) in position_wrap.o
"_Py_DecRef", referenced from:
SwigPyObject_repr(SwigPyObject*) in position_wrap.o
"__PyObject_New", referenced from:
_PyInit__position in position_wrap.o
...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
与编译。我尝试了不同的链接器标志,方法是转到路径python3-config --ldflags
状态。我添加了-std=libstdc++
标志。我曾经以某种方式得到了要生成的模块,但在导入到python时面临的问题是:
ImportError: dlopen(/Users/aaron/Desktop/swigdPython/src/_position.cpython-35m-darwin.so, 2):
Symbol not found: __Z10e_to_ed Referenced from:
/Users/aaron/Desktop/swigdPython/src/_position.cpython-35m-darwin.so
Expected in: dynamic lookup"
我不知道该如何链接这些文件,希望这里有人能有所了解。在
我终于用这个命令实现了:
然后,在导出环境变量之前,我无法加载模块:
export DYLD_LIBRARY_PATH=/Users/aaron/anaconda/lib:$DYLD_LIBRARY_PATH
您应该在link命令行最后指定库:
顺序可能很重要,即
而不是
^{pr2}$相关问题 更多 >
编程相关推荐