使用-fPIC和Swig错误编译 我试图在一些已经存在的C++代码的基础上添加一个SWIG接口,我会用-FPIC标志来产生一些错误。
如果我编译不带-fPIC的现有代码,然后使用以下命令创建Swig模块:使用-fPIC和Swig错误编译 我试图在一些已经存在的C++代码的基础上添加一个SWIG接口,我会用-FPIC标志来产生一些错误。,c++,swig,C++,Swig,如果我编译不带-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)
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)
请提交完整的错误报告。
有关说明,请参阅
如果我弄清楚发生了什么,我会更新这个问题,但它似乎可能与问题实际提出的任何问题无关 关于这个回答,我可能错了 关于警告:在对象中创建DT_TEXTREL 就连我也收到了同样的警告 在我的Makefile中;我做过这样的事 SRC=../../some_folder/file.c 1.c 2.c OBJS=$SRC:.c=.o 在创建共享对象时,我使用了$OBJS;而文件.o将在该位置可用 确保您尝试访问的对象文件在该位置可用 当我进行以下更改时,我的警告消息消失了
OBJS=file.o 1.o 2.o您使用的是什么体系结构和操作系统?我目前最好的猜测是,你的yPyPoo界面模块实际上不是链接到C++库,或者有一个名字的问题,即你从C++调用C代码,但是用声明。基础C++代码确实调用了一些来自LAPACK的C代码,但是所有的代码都是正常工作的。关于链接,你可能是对的,但是这两种方法不是都会失败吗?你能做一个简单的例子,例如10行,简单的内联函数来说明这一点吗?我想在我的系统上玩一玩,弄清楚到底发生了什么,但我现在只能猜测。你正确地将g++列为链接器驱动程序,而将gcc列为编译器驱动程序。但是你也应该用C++驱动程序来编译C++。这可能是你的问题。你说基本库需要用-fPIC编译是疯狂的,但遗憾的是这是真的。欢迎来到Python的爱/恨世界:感谢您的输入,但很抱歉,这太久以前,我记不起这是怎么回事了。所以我不知道你的问题是否和我所经历的一样。