Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用-fPIC和Swig错误编译 我试图在一些已经存在的C++代码的基础上添加一个SWIG接口,我会用-FPIC标志来产生一些错误。_C++_Swig - Fatal编程技术网

使用-fPIC和Swig错误编译 我试图在一些已经存在的C++代码的基础上添加一个SWIG接口,我会用-FPIC标志来产生一些错误。

使用-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)

如果我编译不带-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)
请提交完整的错误报告。 有关说明,请参阅


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

关于这个回答,我可能错了

关于警告:在对象中创建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的爱/恨世界:感谢您的输入,但很抱歉,这太久以前,我记不起这是怎么回事了。所以我不知道你的问题是否和我所经历的一样。