二
9
error: argument of type ‘void *(gillespie)(*)’ does not match ‘void* (*)(void*)’
使用外部函数调用类成员函数的指针错误。查资料表明,两种方式,第一种,对于不能静态化的类成员函数标注类标志,改写成员函数声明从:void *app(void *)至:void (gillespie::*app)(void *);第二种,直接把类改掉,写成主函数,就不存在调用类成员的问题了。
Undefined symbols:
"_main", referenced from:
start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
"_main", referenced from:
start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
缺少主函数错误。在编译的时候,将命令改写成:
g++ -c app.cpp -dynamiclib
g++ -o app app.cpp -lpthread
g++ -o app app.cpp -lpthread
通过。
现在的问题: Segmentation fault
我死定了。
搞定。原来是读入了空指针。我解决问题的办法是:
- 对每一步函数的输入输出进行监控。因为我搞了半天也不知道怎么使用GDB加入断点,HELP也看不懂。最后直接手动让程序自己每一步输出到屏幕,我来看。
- 确认不是多线程链接库的问题。写一个最简单的多线程实例,放进去运行,看是否报segmentation fault。
- 依据每一步的输入输出,手动运算,找出错误的地方。
其实,我的错误非常明显,数组赋值错误。我把一个全局数组指针指向一个子函数的内部成员。当子函数执行完毕,内部成员被释放了……真郁闷。于是我后面的代码一直在读一个空指针,就报错了。
现在虽然程序跑起来了,但是,按之前的结果来看,还有很大的问题。主要是:
1。 随机函数的物理依据和评价。
2。参数的选择。
嗯。我最近有点不太正常。开始写自己的研究内容了。大家就原谅了吧。
多线程似乎对运算速度提高不大。因为是运算密集型程序,而不是读写密集型。如果实验室给我用的服务器有多CPU就好了。
转载请注明文章来自糗世界博客
Tags: 计算机
