Macos 无法在Mac OS X上构建rapidjson测试

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*)’

我试图在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: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_1SSE4_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处于活动状态,然后 正在运行
    gcc-v
  • 从下载适用于您的OS X版本的MacProst安装程序并运行安装程序(升级GCC版本的简单方法)
  • 打开新终端窗口(必须是新的,因为在MacPorts之后更新了路径环境变量 安装)
  • 检查您已经使用
    端口选择--列出gcc
    安装了哪些版本的gcc(注意:您可能还没有安装一些更高版本的gcc。请参阅下一步)
  • 使用
    sudo端口安装gcc47
    (这需要一段时间才能下载)安装最新版本的gcc(目前为gcc47)
  • 再次运行
    port select--list gcc
    ,您应该会在列表中看到新版本(例如
    mp-gcc47
  • 选择此最新版本作为活动gcc版本,并使用
    sudo端口选择gcc mp-gcc47
  • 再次运行
    gcc-v
    检查最新版本是否处于活动状态
  • 在对编译器进行排序后,第一次尝试为release32构建rapidjson时,由于没有为32位构建定义_int128,`,导致了有关限制头文件的错误。Gnu的官方立场是,你需要自己动手。有关更多信息,请参见以下链接中的答案:

    Building for release64或debug64解决了此问题,但由于在
    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存档的自述文件中