mockcpp 官方实例_Mac OS X上编译mockcpp过程-程序员宅基地

技术标签: mockcpp 官方实例  

Mac OS X上编译mockcpp过程

OS版本:

banxia:mockcpp yangjia$ sw_vers

ProductName: Mac OS X

ProductVersion: 10.14

BuildVersion: 18A391

mockcpp支持cmake,编译步骤如下:

cd mockcpp/mockcpp

cmake .

make

第一次编译错误

用上面的方法编译到InterfaceInfo.cpp时报错:

/Users/yangjia/repos/mockcpp/mockcpp/src/InterfaceInfo.cpp:17:12: error:

unknown type name '__class_type_info'

const __class_type_info* info, unsigned int number);

^

/Users/yangjia/repos/mockcpp/mockcpp/src/InterfaceInfo.cpp:21:43: error:

unknown type name '__base_class_type_info'

getNumberOfVtblsByBaseClassTypeInfo(const __base_class_type_info& info

/Users/yangjia/repos/mockcpp/mockcpp/src/InterfaceInfo.cpp:41:29: error:

unknown type name '__vmi_class_type_info'

getNumberOfVtblsByVmi(const __vmi_class_type_info* vmi, unsigned int number)

难道编译器不支持rtti?

设置cmake的选项CMAKE_VERBOSE_MAKEFILE,让cmake输出编译的详细信息:

set(CMAKE_VERBOSE_MAKEFILE ON)

注意:需要在mockcpp/mockcpp/CMakeLists.txt和mockcpp/mockcpp/src/CMakeLists.txt两个文件都增加这个选项才能生效。

编译输出为:

[ 10%] Building CXX object src/CMakeFiles/mockcpp.dir/InterfaceInfo.cpp.o

cd /Users/yangjia/repos/mockcpp/mockcpp/src && /Library/Developer/CommandLineTools/usr/bin/c++ -DMOCKCPP_ALLOW_MULTI_INHERITANCE=1 -DMOCKCPP_MAX_INHERITANCE=2 -DMOCKCPP_MAX_PARAMETERS=12 -DMOCKCPP_MAX_VTBL_SIZE=20 -DMOCKCPP_NO_NAMESPACE=0 -DPACKAGE=\"mockcpp\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_NAME=\"mockcpp\" -DPACKAGE_STRING=\"mockcpp\" -DPACKAGE_URL=\"http://code.google.com/p/mockcpp\" -DVERSION=\"2.6\" -I/Users/yangjia/repos/mockcpp/mockcpp/3rdparty -I/Users/yangjia/repos/mockcpp/mockcpp/include -fPIC -o CMakeFiles/mockcpp.dir/InterfaceInfo.cpp.o -c /Users/yangjia/repos/mockcpp/mockcpp/src/InterfaceInfo.cpp

原来用的是xcode自带的clang:

$ /Library/Developer/CommandLineTools/usr/bin/c++ -v

Apple LLVM version 10.0.0 (clang-1000.10.44.4)

Target: x86_64-apple-darwin18.0.0

Thread model: posix

InstalledDir: /Library/Developer/CommandLineTools/usr/bin

果断换成gcc,设置cmake的选项CMAKE_CXX_COMPILER(mockcpp/mockcpp/src/CMakeLists.txt设置即可):

正好用homebrew装了一个7.3.0版本的gcc,就用这个版本了:

SET(CMAKE_CXX_COMPILER /usr/local/bin/g++-7)

第二次编译错误

编译器换成g++后又报错了:

[ 10%] Building CXX object src/CMakeFiles/mockcpp.dir/AfterMatcher.cpp.o

cd /Users/yangjia/repos/mockcpp/mockcpp/src && /usr/local/bin/g++-7 -DMOCKCPP_ALLOW_MULTI_INHERITANCE=1 -DMOCKCPP_MAX_INHERITANCE=2 -DMOCKCPP_MAX_PARAMETERS=12 -DMOCKCPP_MAX_VTBL_SIZE=20 -DMOCKCPP_NO_NAMESPACE=0 -DPACKAGE=\"mockcpp\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_NAME=\"mockcpp\" -DPACKAGE_STRING=\"mockcpp\" -DPACKAGE_URL=\"http://code.google.com/p/mockcpp\" -DVERSION=\"2.6\" -I/Users/yangjia/repos/mockcpp/mockcpp/3rdparty -I/Users/yangjia/repos/mockcpp/mockcpp/include -fPIC -o CMakeFiles/mockcpp.dir/AfterMatcher.cpp.o -c /Users/yangjia/repos/mockcpp/mockcpp/src/AfterMatcher.cpp

In file included from /Users/yangjia/repos/mockcpp/mockcpp/include/mockcpp/AfterMatcher.h:24:0,

from /Users/yangjia/repos/mockcpp/mockcpp/src/AfterMatcher.cpp:19:

/Users/yangjia/repos/mockcpp/mockcpp/include/mockcpp/mockcpp.h:60:8: error: expected identifier before 'static_assert'

struct static_assert

^~~~~~~~~~~~~

对应的代码如下:

// mockcpp.h

template

struct static_assert

{

typedef int static_assert_failure[condition ? 1 : -1];

};

moclkcpp自己定义了一个static_assert,但是c++11已经引入了static_assert,两者冲突了。一个解决方案是c++11以后就不要编这段代码了:

#if __cplusplus < 201103L

template

struct static_assert

{

typedef int static_assert_failure[condition ? 1 : -1];

};

#endif

用了__cplusplus预编译宏,详细说明见这里

修改后,编译终于通过了。

代码已经放到github上了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39878549/article/details/111784108

智能推荐

JVM-类加载与字节码技术_字节码解释器和类加载_白白白白白白丨的博客-程序员宅基地

JVM-类加载与字节码技术类结构文件magic版本常量池javap工具图解方法执行流程条件判断指令构造方法cinit 构造方法init 构造方法方法调用多态的原理synchronized编译期处理默认构造器自动拆装箱泛型集合取值可变参数foreach 循环数组循环集合循环switch 字符串try-with-resources方法重写时的桥接方法匿名内部类无引用局部变量引用局部变量类加载阶段加载链接验证准备解析初始化发生的时机类结构文件java程序// HelloWorld 示例public _字节码解释器和类加载

有关Thinkpad超级管理员使用指纹登陆的问题_肉馅小包子的博客-程序员宅基地

我的系统: Win7 64位 旗舰版本本型号:Thinkpad E450网上买的,当时为了酷(作)炫(死),选择了有指纹识别的功能的版本,多了差不多100左右。但是回来用的时候傻了,因为我常用的管理员账号是不能设置成指纹识别登陆的。会出现如下错误,这样就感觉不是很爽。在更换了各种驱动,搜索了各种方法之后,总结如下:1、右击我的电脑,打开管理-计算机管理(本

加载自定义pytorch数据集_pytorch加载自定义数据集-程序员宅基地

from data.uila = torch.tensor([[11, 22, 33], [44, 55, 66], [77, 88, 99], [11, 22, 33], [44, 55, 66], [77, 88, 99], [11, 22, 33], [44, 55, 66], [77, 88, 99], [11, 22, 33], [44, 55, 66], [77, 88, 99]])b = torch.tensor([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2])_pytorch加载自定义数据集

python dll文件放哪里_windows 64位 dll文件 位置及python包rtree shapely安装-程序员宅基地

SuperMap iServer 扩展服务及扩展服务提供者范例一.扩展服务实例 1.将iserver-extend1下的listener.java打成jar包2.复制到D:\SuperMap-iServer\webapps\iserver\WEB-INF\lib ...相同根域名下跨域共享session的解决方案https://code.msdn.microsoft.com/CSASPNETSha..._python.runt ime.dll目录

application.yml 引用pom文件里的数据_A stubborn young man的博客-程序员宅基地

application.yml 引用pom文件里的数据阿弥陀佛,祈祷没成功,又呲花了控制台输出是banner.txt文件想要设置的可以看下方链接字母数字转换,不支持汉字图片转换仅限网络地址,有条件的可以自己上线自己两个喜欢的图片转换的内容直接粘贴进benner.txt里就行了,注意文件路径,实在resources下。今天遇到的问题先看图片控制台输出内容application.yml文件 logback-spring.xml文件pom文件上述内容的思路大概就是.yml文

深入理解 HashMap put 方法(JDK 8逐行剖析)_stateiso的博客-程序员宅基地

前言注意:我们今天所有的一切都是基于 JDK 8,JDK 8 的实现和 JDK 7 有重大区别。前面我们分析了 hashCode 和 hash 算法的原理,其实都是为我们解析 HashMap 做铺垫,因为 HashMap 确实比较复杂(如果你每一行代码都看的话,每个位移都纠结的话),虽然总的来说,HashMap 不过是 Node 数组加 链表和红黑树。但是里面的细节确是无比的优雅和有趣。楼主为什么选

随便推点

MySQL创建JDBC连接时区问题_Normal Developer的博客-程序员宅基地

报错内容:ErrorCode=0 SQLState=01S00 The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serve..._jdbc连接时区

2018-2019 ACM-ICPC, Asia Shenyang Regional Contest Solution_banshen0201的博客-程序员宅基地

A. Sockpuppets转载于:https://www.cnblogs.com/Dup4/p/10133050.html

Python入门函数的含义_python入门函数的意义_@悟道_1999的博客-程序员宅基地

list.append(obj) 在列表末尾添加新的对象,只接受一个参数,参数可以是任何数据类型,被追加的元素在 list 中保持着原结构类型。list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)严格来说 append 是追加,把一个东西整体添加在列表后,而 extend 是扩展,把一个东西里的所有元素添加在列表后。list.insert(index, obj) 在编号 index 位置插入 obj。list.remove(obj) 移.._python入门函数的意义

使用javascript跳转时候遇到的兼容问题_Duco的博客-程序员宅基地

IE各个版本和其他浏览器对base标签处理不同。IE无视base标签。IE11也是这样。使用这种通用的方式做跳转就不会出错了(强制使用base标签 :shock: ) [code="java"] var base=document.getElementsByTagName("base"); window.location.href=base[..._js 跳转 兼容

WIN32API获取剪切板文本_lianshuaike2的博客-程序员宅基地

[DllImport("kernel32.dll")] public static extern IntPtr GlobalSize(IntPtr handle); [DllImport("kernel32.dll")] static extern IntPtr GlobalLock(IntPtr hMem);

怎样用PS修改图片上的数字_ps怎么修改数字_百雨的博客-程序员宅基地

情况一、这个数字是图片上有的,比如说2010年,我想要改成2011年,那个”1“是图片上有的。那直接导图进PS,然后按一下M 把”1“框起来,然后按V,接下来按住ctrl和alt(一起按,按住别放),拖动那个虚线的框框,移动到那个要修改的”0”上面。好了 完了。情况二、这个数字图片上没有,比如说2012年要改2013年,这个“3”是图片上没有的。那就导图进PS,用情况一的方法将“2”的位置填充成..._ps怎么修改数字

推荐文章

热门文章

相关标签