linux的简单调试,科学网—linux下简单调试C++功能块的方法 - 黄川的博文

本文介绍了如何使用Python简化C++动态库的测试,通过实例展示了如何利用Python调用C++库的接口函数,如创建、操作s_fifo类,并提供Makefile和TFIFO.py的代码片段,以降低重复编写main函数的繁琐。Python的ctypes模块在这里发挥了关键作用。

时常编写一些C++功能程序,然而测试或者组合它们却是件费力的事。利用python这种被称为“万能胶水”的语言工具可以很好的简化测试过程。下文将简要的列出测试方法的一个范例。

建立动态库所需的头文件:S_fifo.h 内容如下

#include

template class  s_fifo

{

public:

T*  data;

s_fifo(int k)

{

i= k;

data= (T *)malloc(i*sizeof((T)0));

start= 0;

end= i - 1;

sum= 0;

}

~s_fifo()

{

free(data);

};

int sum;

int put(T*);

int get(T*);

int put_s(T*, int);

int get_s(T*, int);

void clear();

private:

int start;

int end;

int i;

};

extern"C"{

intad(int, int);

}

extern"C"{

void*  creat_s_fifo_int(int);

}

extern"C"{

voiddelete_s_fifo_int(void*);

}

extern"C"{

ints_fifo_put(void*,int*);

}

extern"C"{

ints_fifo_get(void*,int*);

}

extern"C"{

ints_fifo_puts(void*,int*,int);

}

extern"C"{

ints_fifo_gets(void*,int*,int);

}

extern"C"{

voids_fifo_clear(void*);

}

这是一个管道类,并引出几个接口函数。

G++测试文件:

44e6a0ecdfe58f20003a380f416f83fe.pngtest.cpp

Makefile文件如下:

CC=g++

PROGS=t

p=$(shell pwd)

t:test.cpp s_fifo.so

$(CC)-o test test.cpp  -ldl

s_fifo.so:s_fifo.cpp s_fifo.h

$(CC)-fpic -shared -o s_fifo.so s_fifo.cpp s_fifo.h

echo$@

clean:

rm-rf *.o

编译生成动态库s_fifo.so,以及连接到测试程序,执行:

[root@localhost fifo]# make

g++ -fpic -shared -o s_fifo.so s_fifo.cpps_fifo.h

echo s_fifo.so

s_fifo.so

g++ -o test test.cpp  -ldl

[root@localhost fifo]# ls

Makefile  s_fifo.cpp   s_fifo.h   s_fifo.so test.cpp   TFIFO.py  test

[root@localhost fifo]# ./test

ad:77

......0 160539576 re:=10

0 1 2 5 10 17 0 0 0 0 0 0 0 0 0 0[root@localhost fifo]#

每次测试或者组合其它功能模块都要去编写一次main去调用获取动态库是繁琐和低效的。

下面用python来测试:

建立python文件TFIFO.py如下:

#!/usr/bin/python

import os

import re

import ctypes

handle=ctypes.CDLL('./s_fifo.so')

print type(handle)

print'************************************************************'

print handle.ad(12,34)

fifo=handle.creat_s_fifo_int(100)

print type(fifo)

L="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

re = handle.s_fifo_puts(fifo,L,5)

print re

U=16*'^__^'

print U

re = handle.s_fifo_gets(fifo,U,8)

print re

print (U)

re = handle.delete_s_fifo_int(fifo)

保存并执行:

[root@localhost fifo]# ./TFIFO.py

************************************************************

46

......0

5

^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^

5

1234567890abcdefghij^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^

[root@localhost fifo]#

其中U是str格式,而我们的类模板生成int型fifo类的应用,所以是4个char一位,也就是

也就是5×4=20 bytes

在动态库文件接口用extern”C”扩展,python调用。

库的接口函数编写用void *指针转换。

Linux下调用.so添加#include 该头文件需要静态库lib:-ldl。

Python版本2.5,动态库需加载ctypes模块。

class CDLL(__builtin__.object)

|  An instance of this classrepresents a loaded dll/shared

|  library, exporting functionsusing the standard C calling

|  convention (named 'cdecl' onWindows).

|

|  The exported functions can beaccessed as attributes, or by

|  indexing with the functionname.  Examples:

|

|  .qsort ->callable object

|  ['qsort'] ->callable object

|

|  Calling the functions releasesthe Python GIL during the call and

|  reaquires it afterwards.

……

注:本文只是个人常用的方法,而不是一个标准.

转载本文请联系原作者获取授权,同时请注明本文来自黄川科学网博客。

链接地址:http://wap.sciencenet.cn/blog-567861-677858.html

上一篇:求正弦函数值

下一篇:曾经的语文课上(排序问题)

先展示下效果 https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值