Linux下gdb调试C++代码:http://jingyan.baidu.com/article/acf728fd464984f8e410a369.html

主要ubuntu下使用C++调用Python:

#python代码:(processing_module.py)

import cv2    

def pre_processing():
    imgfile = "./IMG_3200.png"    
    img = cv2.imread(imgfile)    
    h,w,_ = img.shape    
    
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    
    
    ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)    
    
    # Find Contour    
    _,contours,hierarchy = cv2.findContours( thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)    
    
    # 需要搞一个list给cv2.drawContours()才行!!!!!    
    c_max = []  
    max_area = 0  
    max_cnt = 0  
    for i in range(len(contours)):  
        cnt = contours[i]  
        area = cv2.contourArea(cnt)  
        # find max countour  
        if (area>max_area):  
            if(max_area!=0):  
                c_min = []  
                c_min.append(max_cnt)  
                cv2.drawContours(img,c_min,-1,(0,0),cv2.FILLED)  
            max_area = area  
            max_cnt = cnt  
        else:  
            c_min = []  
            c_min.append(cnt)  
            cv2.drawContours(img,cv2.FILLED)  
  
    c_max.append(max_cnt)  
    cv2.drawContours(img,c_max,(255,255),thickness=-1)    
    
    cv2.imwrite("mask.png",img)    
    #cv2.imshow('mask',img)    
    #cv2.waitKey(0)  

def p(a):
    return a+1

if __name__ == "__main__":
    pre_processing()
    print (p(1))


C++代码:(cpp_python.cpp)

#include <Python.h> 
#include <iostream>
#cinlude <string>

using namespace std;

void img_processing();
int great_function_from_python(int a);

int main() 
{ 
    Py_Initialize(); 

    //python 2.7 和 python 3.5是有区别的。
    //python 3.5需要用wchar_t
    char str[] = "Python";
    Py_SetProgramName(str);
    if(!Py_IsInitialized())
        cout << "init faild/n" << endl;
    # 下面可以只是方便调试,可以不用。
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");
    PyRun_SimpleString("import cv2");
    PyRun_SimpleString("import numpy as np");
    PyRun_SimpleString("print ("Hello Python!")\n");

    img_processing();

    int sum = great_function_from_python(2);
    cout << "sum:" << sum << endl;

    Py_Finalize(); 

    return 0; 
} 

# 不需要传入参数和返回参数
void img_processing()
{
    PyObject * pModule = NULL; 
    PyObject * pFunc   = NULL; 

    pModule = PyImport_ImportModule("processing_module");
    if (pModule == NULL) {
        printf("ERROR importing module");
    } 

    pFunc  = PyObject_GetAttrString(pModule,"pre_processing"); 
    if(pFunc != NULL) {
        PyObject_CallObject(pFunc,NULL); 
    }
    else {
        cout << "pFunc returned NULL" <<endl;
    }

}

#需要输入参数和返回参数
int great_function_from_python(int a) 
{

    int res;

    PyObject *pModule,*pFunc;
    PyObject *pArgs,*pValue;
    
    /* import */
    pModule = PyImport_Import(PyString_FromString("processing_module"));

    /* great_module.great_function */
    pFunc = PyObject_GetAttrString(pModule,"p");
 
    /* build args */
    pArgs = PyTuple_New(1);
    PyTuple_SetItem(pArgs,PyInt_FromLong(a));

    /* call */
    pValue = PyObject_CallObject(pFunc,pArgs);
    
    res = PyInt_AsLong(pValue);

    return res;

}


g++:
g++ cpp_python.cpp -I /usr/include/python2.7 -L /usr/lib/python2.7/config-x86_64-linux-gpu -lpython2.7

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

set(PROJECT_NAME test02)

project(${PROJECT_NAME})

configure_file(processing_module.py processing_module.py copYONLY)
configure_file(IMG_3204.png IMG_3204.png copYONLY)


set(PYTHON_ROOT /usr)
include_directories(${PYTHON_ROOT}/include/python2.7/)
link_directories(${PYTHON_ROOT}/lib/python2.7/config-x86_64-linux-gpu/)

set(SRCS cpp_python.cpp)

add_executable(${PROJECT_NAME} ${SRCS})
target_link_libraries(${PROJECT_NAME} -lpython2.7)

set(CMAKE_CXX_FLAGS_RELEASE "-Wall -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=c++11")
set(CMAKE_BUILD_TYPE Debug)


很不错的参考:http://gashero.yeax.com/?p=38

C++与python传参多维数组:http://blog.csdn.net/stu_csdn/article/details/69488385


C++调用boost.python、boost.Numpy:

boost.Numpy的安装:

下载:git clone https://github.com/ndarray/Boost.NumPy.git 
cd Boost.Numpy 
mkdir build 
cd build 
cmake .. 
make
make install

CMakeLists.txt

cmake_minimum_required( VERSION 2.8 )
 
project( BoostPythonHelloWorld )
 
# Find necessary packages
find_package( PythonLibs 2.7 required )
include_directories( ${PYTHON_INCLUDE_Dirs} )
 
find_package( Boost COMPONENTS python required )
include_directories( ${Boost_INCLUDE_DIR} )
 
# Build our library
add_library( greet SHARED greet.cpp )
 
# Define the wrapper library that wraps our library
add_library( greet_ext SHARED greet_ext.cpp )
target_link_libraries( greet_ext ${Boost_LIBRARIES} greet )


C++调用Python时,传递参数为数组可参考:

(1)boost.python:https://feralchicken.wordpress.com/2013/12/07/boost-python-hello-world-example-using-cmake/

(2)boost.Numpy使用:http://blog.csdn.net/shizhuoduao/article/details/67673604

(3)https://ubuntuforums.org/archive/index.PHP/t-1266059.html

(4)http://blog.numerix-dsp.com/2013/08/how-to-pass-c-array-to-python-solution.html

(5)https://docs.scipy.org/doc/numpy/reference/c-api.array.html#c.PyArray_FILLWBYTE

(6)https://svn.ssec.wisc.edu/repos/collocation/tags/airsmod-eweisz/c++/python.cpp

C++调用Python参考:https://www.zhihu.com/question/23003213

Linux下gdb调试C++代码:http://jingyan.baidu.com/article/acf728fd464984f8e410a369.html

ubuntu下C++如何调用python程序,gdb调试C++代码的更多相关文章

  1. ios – Veracode,调试符号和XCode

    我正在尝试通过Veracode扫描iOS应用程序:一个应用程序安全平台.为了使它们扫描.IPA,.IPA需要包含调试符号.对于正在使用的Archive构建配置和项目/目标,我已指定:>生成调试符号:是>复制期间剥离调试符号:NO>死代码剥离:没有>默认隐藏的符号:NO>剥离链接产品:没有然而,在提交.IPA时,Veracode仍然给我以下错误:没有调试符号编译的主文件–1个文件我需要采取另一个步骤来创建调试符号,或许是存档吗?

  2. 从VS调试iOS时,程序’Mono’已从代码0(0x0)退出

    我有一个问题,当我尝试使用VS2013调试我的iOS应用程序时,我收到以下错误:Theprogram‘Mono’hasexitedwithcode0.我知道以下answer.清理解决方案确实解决了问题,但是下次调试时我需要再次执行…如果有人有长期解决方案,我们将非常感激.解决方法在发射期间它会崩溃吗?

  3. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  4. 如何调试ios共享扩展?

    如何从扩展中打印Xcode的lldb调试器中的日志?解决方法简单回答:>不打印日志消息,但是您可以在断点处停止,然后使用lldb打印所有内容.>运行你的应用程序>在应用程序运行时,转到Debug–>通过PID或名称附加到进程>写下您的扩展名的名称或包ID,然后单击附加>然后以您在设备上执行此操作的任何方式运行扩展程序.>等待调试器在断点处停止扩展.

  5. .dylib在Debug中链接,在XCode中找不到适用于iPhone的版本

    所以我已经将libxml2.2.dylib库包含在我的iPhoneXCode项目中,以创建一些Xml和XPath解析实用程序.当我编译并运行在模拟器和设备的调试模式时,我没有问题,但是,当我切换到发布模式我得到…

  6. 调试 – iOS设备上的remote console.log()

    我正在开发涉及touchEvent的网络应用程序.如果我可以在我的Mac上远程查看控制台,那么调试它会更容易一些.我可以在iOS设备上使我的MobileSafari将控制台日志存储在系统中的某个位置.我已经越狱了我的iPad.谢谢!

  7. 使用XCode进行调试时如何生成SIGINT?

    我的控制台应用程序捕获SIGINT,以便它可以正常退出.但是,在调试程序时按XCode中的CTRLC无效.我可以找到进程并使用终端窗口向我的进程发送SIGINT,但是我希望有一个更简单的解决方案,我可以在XCode中完成.解决方法调试器控制台的暂停按钮实际上会向您的应用发送SIGINT.如果您想让调试器将信号传递给您的应用程序,您可以执行以下操作:>按调试器的暂停按钮,等待调试控制台获得焦点>键入

  8. 更改Xcode中的工作目录

    我设法使用cmake-GXcode在Xcode中运行C项目.现在我想调试它,因为它提供了很好的gdb.但是,我需要更改gdb执行的工作目录,否则它将无法工作.我可以做的是在gdb停止键入cdworking_dir之后,然后手动输入r.这是有效的,但Xcode将不断投诉,也不是一个优雅的解决方案.所以在构建设置的某个地方我应该能够设置工作目录.但在哪里?解决方法在Xcode中,在可执行文件上执行“获取信息”,并查看第一个选项卡–有一个工作目录的设置.

  9. 如何在特定的语言环境中调试Xcode应用程序(英语,比方说)?

    当我开发一个带有Xcode的本地化界面的Mac应用程序时,我倾向于修改英语资源,并且只有在完成其余的开发工作时才对它们进行本地化/翻译.在非英语系统上,当我要求Xcode运行应用程序时,它会使用我自己语言的本地化,当我想选择自己时.那么,如何在调试会话期间告诉Xcode我希望应用程序使用哪种语言?

  10. ios – 如何改进xcode 4.5调试器(noob)中对象变量的显示

    我在Mac上使用Xcode4.5和iOS模拟器来编写iPhone应用程序.当我在调试器中遇到断点时,我使用“Auto”来查看变量.问题是对象最初都是折叠的,我必须扩展每个对象才能看到它的值.没关系,但这很乏味且难以阅读.有没有办法自定义调试器中数据的显示方式?

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部