我正在尝试使用SWIG包装依赖于另一个C ++文件(global.cpp)的C ++文件。我能够让第一个工作正常,但这种嵌套依赖似乎会导致问题。这是我的设置:
def dot_draw(x_positions, y_positions, RGBs):
for dot in range(0, len(x_positions)):
pygame.draw.circle( screen, RGBs[dot], [ x_positions[dot], y_positions[dot] ], 10)
pygame.display.update()
<?php echo "var place =".$city.";"; ?>
原型
然后我这样做。
<?php echo "var place = '$city';"; ?>
我有两个目标文件,然后用
绑定它们%module position
%include global.i
%{
#include "pos.h"
%}
%include "pos.h"
%include "global.h"
... (functions declared)
在仔细阅读之后,我尝试了很多不同的方法,但我完全被扼杀了。
我收到错误
#include <algorithm>
#include "global.h"
#include "pos.h"
...(functions implemented)
编译。我通过转到路径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
标志。我曾经以某种方式获得了生成模块,但是在导入python时遇到了:
...
"_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)
我不知道试图找出链接这些文件的正确方法,并希望有人在这里有一些见解。
答案 0 :(得分:2)
您应该在链接命令行上最后指定库:
g++ -dynamiclib position.o global.o position_wrap.o -o _position.so -lpython
答案 1 :(得分:2)
这里的排序可能很重要,即
g++ -dynamiclib position.o global.o position_wrap.o -lpython -o _position.so
而不是
g++ -dynamiclib -lpython position.o global.o position_wrap.o -o _position.so
答案 2 :(得分:1)
我最终使用此命令工作:
g++ -dynamiclib -o _position.so position_wrap.o position.o global.o -
I/Users/aaron/anaconda/include/python3.5m/ - L/Users/aaron/anaconda/lib/ -I/Users/aaron/Desktop/swigdPython/src -lpython3.5
在导出环境变量之前,我无法加载模块:
export DYLD_LIBRARY_PATH=/Users/aaron/anaconda/lib:$DYLD_LIBRARY_PATH