Я, должно быть, недавно изменил или обновил свои пакеты, потому что у меня теперь есть эта ошибка при запуске скрипта Python (встроенного в C ++):
ERROR 1: NUMPY driver was compiled against GDAL 2.2 but current library version is 1.11
Вот пакеты, которые я вызываю в коде Python:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import gdal as gd
import math
import numpy as np
import scipy.ndimage
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
from matplotlib.colors import LightSource, Normalize
import Image
from scipy.ndimage.filters import gaussian_filter
import sys
Когда я набираю: gdalinfo --version, я получаю: GDAL 2.2.2, выпущенный 2017/09/15
Я думаю, что на моем компьютере сейчас есть другие версии Python и GDAL, но я не могу найти, как решить эту ошибку.
Я могу без проблем запустить код python, используя python2.7, кажется, только когда код вызывается из моего кода C ++, я получаю эту ошибку.
Я использую эту функцию для загрузки кода Python в программу C ++:
PithonExtension::PithonExtension(char* pithon_path, char* pithon_filename,
char* program_name, const std::string& repository) {
Py_SetProgramName(program_name);
// Initialize the Python Interpreter
Py_Initialize();
// Log
PyObject *sys = PyImport_ImportModule("sys");
PyObject* io_stdout = PyFile_FromFile(stdout, "stdout", "a", nullptr);
PyObject_SetAttrString(sys, "stdout", io_stdout);
PyObject* io_stderr = PyFile_FromFile(stderr, "stderr", "a", nullptr);
PyObject_SetAttrString(sys, "stderr", io_stderr);
PyObject* io_stdin = PyFile_FromFile(stdin, "stdin", "r", nullptr);
PyObject_SetAttrString(sys, "stdin", io_stdin);
// Tell the program where to find the python file we will launch.
PyObject *sysPath = PySys_GetObject("path");
PyObject *path = PyString_FromString(pithon_path);
int result = PyList_Insert(sysPath, 0, path);
// First, import module.
PyObject* myModuleString = PyString_FromString(pithon_filename);
PyObject* myModule = PyImport_Import(myModuleString);
// Then getting a reference to your function.
PyObject* myFunction = PyObject_GetAttrString(myModule,(char*)"workflow");
PyObject* args = PyTuple_Pack(1,PyString_FromString(repository.c_str()));
// Then getting your result.
PyObject* myResult = PyObject_CallObject(myFunction, args);
}
GDB сообщает мне: Программа получила сигнал SIGSEGV, Ошибка сегментации.0x00007fffe0fcb390 в GDALRasterBand :: ReportError (CPLErr, int, char const *, ...) () из /usr/lib/libgdal.so.20