我想使用SWIG封装一个依赖于另一个C++文件(global.cpp)的C++文件,我已经成功地处理了第一个文件,但是这个嵌套依赖似乎会导致问题。以下是我的设置:
position.i
%module position
%include global.i
%{
#include "pos.h"
%}
%include "pos.h"
%include "global.h"
... (functions declared)
position.cpp
#include <algorithm>
#include "global.h"
#include "pos.h"
...(functions implemented)
position.h
原型
然后我这样做。
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
我在 Stack Overflow 上查看了许多方法,试图解决这个问题,但是都没有成功。现在我一直受阻。
出现了一个错误。
...
"_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"
我正在努力想出正确的方法来链接这些文件,希望这里有人能给予指导。
Thread model: posix "/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/ld" -demangle -dynamic -dylib -arch x86_64 -macosx_version_min 10.10.0 -o _sunposition.so sunpos.o global.o sunpos_wrap.o -lpython -lc++ -lSystem /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/lib/darwin/libclang_rt.osx.a
。 - Anisotropic/usr/lib
目录中看到了libpython.dylib
吗? - chqrlie