gpt4 book ai didi

python - Python 3.6调用C++扩展导入报错 "undefined symbol: _ZNK9FastNoise8GetNoiseEff"

转载 作者:太空宇宙 更新时间:2023-11-03 22:20:03 33 4
gpt4 key购买 nike

我目前正在尝试为 python 脚本制作一些 C++ 扩展。在 C++ 方面,它似乎编译得很好,它生成了我的 .so 共享库,但是当我在我的 python 脚本中调用它时,它引发了 undefined symbol 的错误。目前代码如下:

#include <iostream>
#include "FastNoise.h"
#include <string>
#include <time.h>

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>

#include <boost/python/def.hpp>
#include <boost/python/module.hpp>

using namespace std;
using namespace cv;
namespace bp = boost::python;

int gen(int _size)
{
FastNoise myNoise;
myNoise.SetNoiseType(FastNoise::Simplex);
myNoise.SetSeed((int)(rand() * time(NULL)));

Size img_size(_size, _size);
Mat noise_map(img_size, CV_32FC3);

for (int y = 0; y < _size; y++) {
for (int x = 0; x < _size; x++) {
Vec3f &color = noise_map.at<Vec3f>(Point(x, y));
color.val[0] = (myNoise.GetNoise(x, y) + 1) / 2;
color.val[1] = (myNoise.GetNoise(x, y) + 1) / 2;
color.val[2] = (myNoise.GetNoise(x, y) + 1) / 2;
}
}

imshow("test", noise_map);
waitKey(0);
return 0;
}

BOOST_PYTHON_MODULE(gen) {
bp::def("gen", gen);
}

这是我编译它的方式:

g++ main.cpp -I/opt/opencv/include/opencv -I/usr/include/python3.6m -I/usr/local/include/boost -L/opt/opencv/release/lib -L/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu -L/usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lpython3.6m -lboost_python36 -o NoiseModule.so -shared -fPI

当我在 python 中导入它时,它给我这个错误:

>>> import NoiseModule
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /home/matheus/PycharmProjects/TerrainGenerator/NoiseGenerator/NoiseModule.so: undefined symbol: _ZNK9FastNoise8GetNoiseEff
>>>

任何有关此问题的帮助都将不胜感激。

最佳答案

您的共享对象无法访问您使用的每个函数。您可能有一个类似于 FastNoise.cpp 的文件,它实现了您的 FastNoise 对象。然而,您只使用 main.cpp 来编译您的动态库 (.so) 文件。因此,请确保所有 .cpp 文件都包含在您的 Python C++ 扩展的构建中。

另一种选择可能是使您的 FastNoise 对象完全在 header 内实现。

关于python - Python 3.6调用C++扩展导入报错 "undefined symbol: _ZNK9FastNoise8GetNoiseEff",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51273418/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com