我正在尝试在一些已经存在的 c++ 代码之上添加一个 Swig 接口,并且我遇到了一些带有-fPIC
标志的错误。
如果我编译已经存在的代码-fPIC
,然后使用以下命令创建我的 Swig 模块:
swig -python -c++ pyinterface.i
gcc -fPIC $(CFLAGS)-I $(PYTHON_INCLUDE_DIR) -c pyinterface_wrap.cxx
g++ -shared -o _pyinterface.so pyinterface_wrap.o -I $(PYTHON_INCLUDE_DIR) -L $(PYTHON_LIB_DIR) $(LPATH) $(LFLAGS) $(IPATH) $(LIBS)
然后我得到一个
warning: creating a DT_TEXTREL in object
然而,该模块似乎确实可以在 Python 中加载和工作。
如果我编译已经存在的代码,-fPIC
然后用同样的方法创建我的模块,当我尝试将它导入 python 时:
import pyinterface
然后我得到错误
ImportError: ./_pyinterface.so: undefined symbol: _Z7InitErfPA20_d
我不知道为什么会这样。但是,在我试图包装的基本 c++ 文件的编译中,它们确实链接到一些标准库,例如-llapack
.
难道是我需要重新编译这些基础库,比如 lapack,用-fPIC
. 这似乎很疯狂。
编辑:
实际上很抱歉,我没有意识到,但是使用 -fPIC 标志我在编译期间遇到错误:
g++: Internal error: Killed (program cc1plus)
请提交完整的错误报告。有关说明,请参见http://bugs.gentoo.org/。
如果我弄清楚发生了什么,我会更新这个问题,但似乎它可能与问题实际提出的任何事情无关。