0

我正在尝试在一些已经存在的 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/

如果我弄清楚发生了什么,我会更新这个问题,但似乎它可能与问题实际提出的任何事情无关。

4

1 回答 1

0

关于这个回复,我可能是错的。

关于警告:在对象中创建 DT_TEXTREL

甚至我也收到了同样的警告。

在我的 Makefile 中;我做过这样的事情

SRC= ../../some_folder/file.c 1.c 2.c

OBJS=$(SRC:.c=.o)

在制作共享对象时,我正在使用这个 $(OBJS); 而“file.o”将在该位置可用。

确保您尝试访问的目标文件在该位置可用。

当我进行以下更改时,我的警告消息消失了

OBJS=文件.o 1.o 2.o

于 2014-01-08T13:31:01.753 回答