Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
将python和numpy嵌入C+;时出现导入数组()错误+; 我写了一个简单的代码,试图在C++中使用NoPy。 我的操作系统是ubuntu16.04,带有gcc5.4.0、Python2.7.12和numpy1.15.0。 这是我的代码test2.cpp: #include "Python.h" #include "numpy/arrayobject.h" int main(int argc, char **argv) { Py_Initialize(); import_array(); Py_Finalize(); return 0; }_C++_Python 2.7_Numpy_Import - Fatal编程技术网

将python和numpy嵌入C+;时出现导入数组()错误+; 我写了一个简单的代码,试图在C++中使用NoPy。 我的操作系统是ubuntu16.04,带有gcc5.4.0、Python2.7.12和numpy1.15.0。 这是我的代码test2.cpp: #include "Python.h" #include "numpy/arrayobject.h" int main(int argc, char **argv) { Py_Initialize(); import_array(); Py_Finalize(); return 0; }

将python和numpy嵌入C+;时出现导入数组()错误+; 我写了一个简单的代码,试图在C++中使用NoPy。 我的操作系统是ubuntu16.04,带有gcc5.4.0、Python2.7.12和numpy1.15.0。 这是我的代码test2.cpp: #include "Python.h" #include "numpy/arrayobject.h" int main(int argc, char **argv) { Py_Initialize(); import_array(); Py_Finalize(); return 0; },c++,python-2.7,numpy,import,C++,Python 2.7,Numpy,Import,我使用CMakeLists.txt如下: cmake_minimum_required(VERSION 3.10) project(test_python LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_BUILD_TYPE DEBUG) set(PYTHON_INCLUDE_PATH /usr/include/python2.7) set(PYTHON_LIBRARY /usr/lib/python2.7/config-x86_6

我使用
CMakeLists.txt
如下:

cmake_minimum_required(VERSION 3.10) 

project(test_python LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE DEBUG)

set(PYTHON_INCLUDE_PATH /usr/include/python2.7)
set(PYTHON_LIBRARY /usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so)
set(NUMPY_INCLUDE_PATH /usr/local/lib/python2.7/dist-packages/numpy/core/include)

include_directories(${PYTHON_INCLUDE_PATH})
include_directories(${NUMPY_INCLUDE_PATH})

add_executable(test_python test2.cpp) 
target_link_libraries(test_python 
    ${PYTHON_LIBRARY}
)
但是,在编写过程中,我发现了以下编译错误:

/usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/__multiarray_api.h:1547:144: error: return-statement with no value, in function returning ‘int’ [-fpermissive]
 #define import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return NUMPY_IMPORT_ARRAY_RETVAL; } }
                                                                                                                                                ^
/home/camsys/projects/hmr_c/test/test2.cpp:7:5: note: in expansion of macro ‘import_array’
     import_array(); 
     ^
/usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/\uuu-multiarray\u-api.h:1547:144:错误:返回“int”[-fpermissive]的函数中没有值的返回语句
#定义import_array(){if(_import_array()<0){PyErr_Print();PyErr_SetString(PyExc_ImportError,“numpy.core.multiarray导入失败”);返回numpy_import_array_RETVAL;}
^
/home/camsys/projects/hmr_c/test/test2.cpp:7:5:注意:在宏“导入数组”的扩展中
导入数组();
^
这很奇怪,因为当我将
Python3.5
Numpy1.15.0
一起使用时,一切都正常有人能告诉我为什么会发生此错误以及如何解决它吗

4年前,我发现了另一个类似的问题,但没有答案。这个问题是关于
python3.4
,而我正在处理
python2.7

import\u array()
是在
/usr/local/lib/pythonX.Y/dist packages/numpy/core/include/numpy/\u multiarray\u api.h
中定义的宏。在代码预处理期间(编译之前),此宏的定义将在
main
函数中展开和替换,如下所示:

int main(int argc, char **argv) 
{
    Py_Initialize();     
    {
        if (_import_array() < 0) {
            PyErr_Print();
            PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import");
            return NUMPY_IMPORT_ARRAY_RETVAL;
        }
    }
    Py_Finalize(); 
    return 0; 
}
int main
函数应该返回一个整数,但是在扩展的
if语句中(如果满足条件
\u import\u array()<0
),对于python版本>=3,它返回
NULL=0(#define NULL 0)
,因此它可以工作。对于<3的python版本,
main
函数不返回任何内容,因此会出现错误

解决方法(对于python版本<3):

void temp_func() {
    import_array();
}

int main(int argc, char **argv) {
    Py_Initialize();     
    temp_func();

    Py_Finalize(); 
    return 0; 
}

希望,这回答了问题。

它工作得很好。
void temp_func() {
    import_array();
}

int main(int argc, char **argv) {
    Py_Initialize();     
    temp_func();

    Py_Finalize(); 
    return 0; 
}