首页 > 解决方案 > 编译 c++ 代码以便在 django 项目中使用它时出错

问题描述

最近我为了一些图像处理的目的启动了一个 Django 项目。由于某些性能原因,我用 C++ 编写了一个函数并独立测试它。现在我想在我的 python 代码中调用那个 c++ 函数。但是当我用这个指令编译它时:


g++ a.cpp `pkg-config --cflags --libs opencv` -shared -o program.so

发生此错误:


/usr/bin/ld: /tmp/ccvIlzBz.o: relocation R_X86_64_PC32 against symbol `_ZNK2cv7MatSizeclEv' can not be used when making a shared object; recompile with -fPIC

根据这个错误,如果用 -fPIC 标志替换 -shared,它会编译,但在我的 python 代码中,发生了这个错误:


cannot open shared object file:

这意味着它没有正确编译。

最后我用这个指令构建了 c++ 程序:

g++ a.cpp `pkg-config --cflags --libs opencv` -shared  -fPIC  -lm -o program.so

但是当我执行我的python代码并在该c ++代码中调用一个函数(sample_func)时,它给出了这个错误:

../program.so: undefined symbol: sample_func

我该如何解决这个问题?

标签: c++python-3.xshared-librariesctypesfpic

解决方案


推荐阅读