tangqi_334 2019-08-19 11:56 采纳率: 0%
浏览 1448

linux使用clion进行c++和python的交叉编译,无法导入python的第三方库

在ubuntu14.04下使用clion进行c++调用python编写的模块,当python中import第三方库(如numpy时),出现错误。具体如下:

这是我的代码:
cmakelist:

cmake_minimum_required(VERSION 3.5)
project(image_pretreat)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -util -ldl -pthread")


# 添加Python.h头文件路径
include_directories(/home/neil/.pyenv/versions/3.6.4/include/python3.6m)

# 添加python动态链接库文件目录
link_directories(/home/neil/.pyenv/versions/3.6.4/lib/python3.6/config-3.6m-x86_64-linux-gnu)

set(SOURCE_FILES main.cpp)
add_executable(image_pretreat ${SOURCE_FILES})

# 依赖库文件
target_link_libraries(image_pretreat libpython3.6m.a)
target_link_libraries(image_pretreat ${CMAKE_DL_LIBS})
target_link_libraries(image_pretreat util)

main函数

#include <Python.h>
#include <iostream>
using namespace std;

int main()
{
    Py_Initialize();

    //声明python对象(模型、函数、参数、返回值)
    PyObject *pModule, *pFunction, *pArgs, *pRetValue;
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('/home/neil/ClionProjects/image_pretreat')");

    //调用python模块
    pModule = PyImport_ImportModule("test123");

    if (!pModule)
    {
        printf("import python failed!!\n");
        return -1;
    }

    //调用python模块中的函数
    pFunction = PyObject_GetAttrString(pModule, "add");
    if (!pFunction)
    {
        printf("get python function failed!!!\n");
        return -1;
    }

    //新建python元组对象
    pArgs = PyTuple_New(2);
    PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 1));
    PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 2));

    int r1,r2;
    r1=r2=0;
    pRetValue=PyObject_CallObject(pFunction, pArgs);
    PyArg_ParseTuple(pRetValue, "i|i", &r1, &r2);
    printf("%d,%d",r1,r2);

    //关闭 Python 脚本解释器
    Py_Finalize();
    return 0;
}

Python模块

import numpy as np
def add(a,b):
    return a+b,a-b

报错:
import python failed!!
Process finished with exit code 255

已采取方法:
1、将python3.6各个路径都包含进了PYTHONPATH和PYTHONHOME环境变量
2、主函数中手动设置py_SetPythonhome函数

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用