Macos 无法在Mac OS X上构建rapidjson测试
我试图在MacOSX上为rapidjson 0.11()构建测试。它包括三个项目:gtest(构建良好)、unittest(构建失败)和perftest(构建失败),以及在构建时使用错误1和错误2发出错误 编译器输出显示unittest和perftest的以下错误,这些错误导致make失败:Macos 无法在Mac OS X上构建rapidjson测试,macos,build,compilation,Macos,Build,Compilation,我试图在MacOSX上为rapidjson 0.11()构建测试。它包括三个项目:gtest(构建良好)、unittest(构建失败)和perftest(构建失败),以及在构建时使用错误1和错误2发出错误 编译器输出显示unittest和perftest的以下错误,这些错误导致make失败: ../../include/rapidjson/reader.h: In function ‘const char* rapidjson::SkipWhitespace_SIMD(const char*)’
../../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脚本文件,因为其中包含的一个不起作用。您可以从第二篇文章的附件下载更正后的脚本
有没有关于如何在OS X上成功构建的想法?简短回答-我有一个较旧版本的gcc(4.2),它不支持-msse4.2标志(它是在gcc 4.3中引入的) 升级至gcc的最新版本后,上述问题消失:
gcc-v
端口选择--列出gcc
安装了哪些版本的gcc(注意:您可能还没有安装一些更高版本的gcc。请参阅下一步)sudo端口安装gcc47
(这需要一段时间才能下载)安装最新版本的gcc(目前为gcc47)port select--list gcc
,您应该会在列表中看到新版本(例如mp-gcc47
)sudo端口选择gcc mp-gcc47
gcc-v
检查最新版本是否处于活动状态test/unittest/readertest.cpp:187:4
中出现了一些关于丢弃限定符的警告,它仍然无法生成。由于make文件包含编译器标志-Werror=cast qual
,这些警告被视为错误。在unittest和perftest makefiles中删除这个标志解决了这个问题(这不是理想的解决方案,但我只是想构建它)
仍然存在链接器警告,因为/usr/lib64文件夹不存在,并且makefiles包含标志-L/usr/lib64
,但构建仍然成功
成功-unittest_release_x64_gmake和perftest_release_x64_gmake都顺利运行
注意:rapidjson构建说明包含在ZIP存档的自述文件中