使用-fPIC和Swig错误进行编译

时间:2012-07-04 08:31:57

标签: c++ swig

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

可能是因为我需要使用-fPIC重新编译这些基本库,例如lapack。这似乎很疯狂。

编辑:

实际上很遗憾,我没有意识到,但是在编译期间我遇到了-fPIC标志错误:

g++: Internal error: Killed (program cc1plus)

请提交完整的错误报告。 有关说明,请参阅http://bugs.gentoo.org/

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

1 个答案:

答案 0 :(得分:0)

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

关于警告:在对象

中创建DT_TEXTREL

即使我收到同样的警告。

在我的Makefile中;我做过类似的事情

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

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

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

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

当我做出以下更改时,我的警告消息消失了

OBJS = file.o 1.o 2.o