Ubuntu 16.04系统上Clang与GCC之间切换

在编译 C++代码的时候,我们有时需要比较一下不同编译器之间优化性能的差异,因此需要在 ClangGCC之间进行切换,用来比较最后的实际效果。

Ubuntu 16.04系统上使用如下命令进行切换

参考链接


Switching between GCC and Clang/LLVM using CMake

Ubuntu 16.04上Linux C++程序性能分析工具perf使用入门

目前, perfLinux系统上最全面最方便的一个性能检测工具。由 Linux内核携带并且同步更新。

Ubuntu 16.04系统上需要执行如下命令安装:

使用方法如下( gcc编译时最好使用 -g参数,生成符号,方便调试):

参考链接


Linux C++程序进行性能分析工具gprof使用入门

软件的性能是软件质量的重要考察点,不论是在线服务程序还是离线程序,甚至是终端应用,性能都是用户体验的关键。这里说的性能重大的范畴来讲包括了性能和稳定性两个方面,我们在做软件测试的时候也是要重点测试版本的性能表现和稳定性的。对于软件测试过程中发现的性能问题,如何定位有很多的方法。基本的方法可能是开发者对代码进行 review,或者是使用一些工具对代码进行性能分析。常见的性能分析工具有哪些呢?以下两篇文章做了详细的总结:

gprof是可用于 Linux C++代码性能分析工具之一。
继续阅读Linux C++程序进行性能分析工具gprof使用入门

error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments

使用 open函数的时候,如果在第二个参数中使用了 O_CREAT,就必须添加第三个参数:创建文件时赋予的初始权。

建议使用如下参数创建文件:

macOS Sierra (10.12.3)使用Eclipse IDE for C/C++ Developers结合CMake Editor编辑Linux MakeFile项目

使用 macOS Sierra(10.12.3)开发 C/C++项目,经常用到网上的开源项目,很多项目是直接用 MakeFile来管理项目的,导致在调试,编辑项目的时候,比较麻烦,搜索了半天,才找到目前看来比较方便的方式,就是结合 Eclipse IDE for C/C++ DevelopersCMake Editor的方式来进行处理。

继续阅读macOS Sierra (10.12.3)使用Eclipse IDE for C/C++ Developers结合CMake Editor编辑Linux MakeFile项目

在VC中用CMarkup类操纵XML

首先到http://www.firstobject.com/dn_markup.htm上面下载 CMarkup类,将 CMarkup.cppCMarkup.h导入到我们的工程中就可以了。编译可能会出现问题,解决的方法是在 CMarkup.cpp的开头加上 #include,或者关闭预编译也可以。

1.创建一个 XML文档

对于创建一个 XML文档,需要实例化一个 CMarkup对象,并调用 AddElem创建根元素。在这个位置,如果你调用 AddElem("School"),文档会简单的装一个空元素. 然后调用 AddChildElem在根元素的下面创建元素。

效果如下:

2.浏览特定元素

//***********************这样也可以*****************************/

//*********************或者这样也可以*************************/

//***********结果**************

3.修改元素
//把 Department为" English"改为" Chinese"

效果如下:

4.添加
4.1 添加在最后面(用 AddElem

效果如下:

4.2 添加在最前面(用 InsertElem

效果如下:

5.删除

效果如下:

上面的例子都是不带属性的,下面举一个带有属性的例子。
1.生成 XML文档

效果如下:

2.查找特定属性

3.修改特定属性

效果如下:

参考链接


在VC中用CMarkup类操纵XML

C/C++中的正则表达式库——PCRE, PCRE++

1. 什么是PCRE? 什么是PCRE++?
PCRE,全称是 Perl Compatible Regular Expressions。从名字我们可以看出 PCRE库是与 Perl中正则表达式相兼容的一个正则表达式库。PCRE是免费开源的库,它是由C语言实现的,这里是它的官方主页:http://www.pcre.org/,感兴趣的朋友可以在这里了解更多的内容。
要得到PCRE库,可以从这里下载:http://sourceforge.net/projects/pcre/files/

PCRE++是一个对 PCRE库的 C++封装,它提供了更加方便、易用的 C++接口。这里是它的官方主页:http://www.daemon.de/PCRE,感兴趣的朋友可以在这里了解更多的内容。
要得到 PCRE++库,可以从这里下载:http://www.daemon.de/PcreDownload

2. PCRE接口介绍
(1). pcre_compile

(2). pcre_exec

3. PCRE++接口介绍
PCRE++PCRE库封装成了两个类,一个是 RE_Options, 用来指定匹配选项,一个是 RE,用来提供匹配相关的接口。 RE_options类在这里我就不介绍了,我主要介绍一下 RE类:
(1) RE的构造函数传入正则表达式,并在构造函数中调用Init函数,将该正则表达进行编译
(2) REpattern()成员用来得到初始传入的正则表达式字符串
(3) REerror()成员用来得到匹配过程中的出错信息
(4) REFullMatch()成员用来判断某字符串整体是否匹配指定正则表达式
(5) REPartialMatch()成员用来判断某字符串的部分是否匹配指定正则表达式

4. PCRE/PCRE++使用注意事项
(1)使用 pcre请包含 pcre.h头文件
(2)使用 pcre_compile, pcre_exec后,记得调用 pcre_free释放内存,以免造成内存泄露
(3)使用 pcre编译的时候需要依赖 libpcre.a
(4)使用 pcre++请包含 pcrecpp.h头文件
(5)使用 pcre++RE类的析构函数会自动释放相关内存,因此不用担心内存泄露
(6)使用 pcre++编译的时候需要依赖 libpcrecpp.a
(7)使用 pcrecpp要使用 pcrecpp命名空间

5. PCRE使用举例
下面是例程:

下面是运行结果:

6. PCRE++使用举例
下面是例程:

下面是运行结果:

参考链接


深入浅出C/C++中的正则表达式库(三)——PCRE, PCRE++

fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突-解决

编译项目,遇到了这个问题

查了很多地方,解决方案是:

1.右键项目,属性,最顶端,配置为x64或者x86(如果没有该选项就新建)

2.链接器-高级,目标计算机选为一致的

运行还是会报这个错误

最后发现

3.链接器-命令行

最底部有一条指令,修改为一致的机型就可以了

android-ndk-r10e开启C++11,编译TEMP_FAILURE_RETRY错误

在使用select来操作socket的时候,一般都是会这么写

其中的“TEMP_FAILURE_RETRY”宏在“unistd.h”中的定义如下:

正常情况下,编译是没问题的。但是当在“Application.mk”中增加

之后,发现编译不通过了。报告“error: 'typeof' was not declared in this scope”。

解决方法:


“c++11”和“gnu++11”的差别:

“gnu++11”增加了很多的扩展“c++11”的功能,功能更加多,具体的扩展参考Extensions to the C++ Language

NDK下GCC定义__cplusplus不正确的问题

在C++升级之后,编译会出现“C++11 error: unable to find string literal operator 'operator"”这种错误,按照链接里面操作,在“android-ndk-r10e”上面依旧出现问题。

追踪了一下,才发现,这个是GCC的一个BUG,GCC-4.7,GCC-4.8中定义的__cplusplus 竟然都是 “__cplusplus=1”,这个是明显不正确的,具体的BUG内容查看“__cplusplus defined to 1, should be 199711L”。

尽管这个BUG已经修复了,但是很明显“android-ndk-r10e”使用的GCC版本并没有合并这个补丁。

解决方案

升级GCC到4.9,在”Application.mk“中增加