P2PSim在g++ 4.3下的编译

简介:
本文在查理的书架首先发布,会在最快时间内更新到Nathan的技术空间上
因为科研需要,需要找一个高效的p2p模拟器,能称得上高效的,并且支持简单拓扑的,也就p2psim了。但是p2psim在2005年已经停止更新了,而且没有多少文档,因此要自己摸索有些问题。
在安装中,我用的是Debian 5.03 lenny平台。g++是4.3版本。下载到的p2psim 0.3版本无法在g++4的版本上进行编译通过。网上最简单的做法是用老版本的linux。这是我不屑做的事情。经过一个下午的折腾,终于把所有编译问题都解决了,在这里做一个问题解决的总结。以便后来人。
我碰到的问题一共有6类。按照出现和解决的次序分别为:
1:hash_map STL错误, C++库更新造成的问题
2: strcmp未申明, g++对缺省include变严格了
3:类函数 Node:xxxx: C++语法版本
4:代码错误 vividi:  作者的低级错误
6:bighashmap.cc include问题: 还是觉得是C++语言机制问题
5:STL里的assert错误: 不清楚原因
1. hash_map STL错误
这个问题g++会提示用到了ext/hashmap这个文件,这个文件已经过时了,现在建议用unordered_hash.解决办法,在configure里面找到DEF定义,加入-Wobsolete 来抑制这个警告就可以了。然后重新configure 和make。
2: strcmp未申明
这个问题很容易解决,在公共包含的.h文件里面引入#include 就可以了。还是新版本的g++变严格了的问题。
3:类函数 Node:xxxx:
在很多.c文件里面,出现了static的类函数前面加上类名字。比如Node 类里面的abc函数是Node::abc(),我不知道这是那门子C++方言。反正在4的版本中g++不允许了。把这些类名去掉就好了。
4:代码错误 vividi
在vividtest.c里面vividitest类里面,有个半吊子成员量定义,用的类型是vividi,从来没被用过,看来是作者的低级错误。注释掉就好了。

6:bighashmap.cc include问题:
这个问题很混蛋,在ld做连接的时候,出现HashMap<>:xxxx()找不到的错误。HashMap是在bighashmap.cc里面声明的,被include在node.c里面了,但是其他地方都没有include. 作者的原意是把模板当作普通类,希望在node.o里面包括,然后连接到其他的.o里面去。真是疯了:C++的模板是源代码级别的展开,根本不可能这么搞的。我改成在所有公共的.h头文件里面包括这个cc文件。
 
5:STL里的assert错误:
在bighasmap.cc里面 HashMap类模板里面用了不少assert来做出错检查,但是g++觉得这是不允许的,所以统统注释掉就好了。然后就编译通过了。
 
总结g++ 3.x是个跑单帮的,啥方言都懂,现在到了4.x版本,完成原始积累,开始打高尔夫,说官话。



     本文转自nathanxu 51CTO博客,原文链接:http://blog.51cto.com/nathanxu/245100,如需转载请自行联系原作者


相关文章
|
程序员 Linux Android开发
libYuv编译
安卓使用NDK编译libYuv库
310 0
|
11月前
|
缓存 Java Shell
ThingsBoard详细编译指南2.4.3
ThingsBoard详细编译指南2.4.3
352 0
jpegNPP编译为so
jpegNPP编译为so
59 0
|
自然语言处理
编译
编译
92 0
【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )
【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )
171 0
【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )
|
Web App开发 存储 缓存
V8 编译浅谈
本文是一个 V8 编译原理知识的介绍文章,旨在让大家感性的了解 JavaScript 在 V8 中的解析过程。
V8 编译浅谈
|
开发工具 C++ git
DCMTK-001-3.6.6编译
DCMTK-001-3.6.6编译
243 0
DCMTK-001-3.6.6编译
|
C语言
01-2.C(C程序编译步骤-gcc 编译过程)
c代码编译成可执行程序4步: 1.预处理:宏定义展开,头文件展开,条件编译,同时将代码中的注释删除,这里并不会检查语法 gcc -E hello.c -o hello.
750 0
|
编译器 开发工具 IDE
编译问题汇总
每次在编译各类第三方库的时候都会碰到很多问题,基本上都是通过Google解决,其实简单反思一下就会发现是对于系统了解的不够,对于各类标准也是了解甚少。所以一而再再而三发生的问题其实是可以尽量去避免的。
1927 0
fdkaac的编译方法
https://github.com/nu774/fdkaac_autobuild
1405 0