我正在尝试在 Mac OS X 上为 rapidjson 0.11 ( http://code.google.com/p/rapidjson/ ) 构建测试。它包括三个项目:gtest(构建良好)、unittest(构建失败)和 perftest(构建失败),并且在构建时会出现错误 1 和错误 2。
编译器输出显示导致 make 失败的 unittest 和 perftest 的以下错误:
../../include/rapidjson/reader.h: In function ‘const char* rapidjson::SkipWhitespace_SIMD(const char*)’:
../../include/rapidjson/reader.h:116: error: ‘_SIDD_UBYTE_OPS’ was not declared in this scope
../../include/rapidjson/reader.h:116: error: ‘_SIDD_CMP_EQUAL_ANY’ was not declared in this scope
../../include/rapidjson/reader.h:116: error: ‘_SIDD_BIT_MASK’ was not declared in this scope
../../include/rapidjson/reader.h:116: error: ‘_SIDD_NEGATIVE_POLARITY’ was not declared in this scope
这些预处理器常量与 SSE4 指令相关。rapidjson 可以使用 SSE2 或 SSE4.2 来加速,构建时默认使用 SSE4.2。
makefile 包含 -msse4.2 编译器开关以启用 SSE4.2 支持,并且查看头文件显示在 OS X 上,需要为SIDD ... 常量定义SSE4_1和SSE4_2预处理器常量。定义。出于某种原因,这些SIDD ... 常量没有被定义。
进一步的研究表明 -msse4 开关支持 SSE4.1 和 SSE4.2,所以我尝试将开关更改为 -msse4,但仍然出错。
不确定 -msse4.2 开关是否自动定义SSE4_2,但我尝试手动定义它,但还是没有运气。
注意:如果你想尝试在 Mac 上自己构建它,你需要下载一个不同的 premake 脚本文件,因为包含的文件不起作用。您可以在此处https://code.google.com/p/rapidjson/issues/detail?id=54从第二篇文章的附件中下载更正后的脚本
关于如何在 OS X 上成功构建它的任何想法?