2013-01-22 28 views
0

我试图在Mac OS X上构建rapidjson 0.11(http://code.google.com/p/rapidjson/)的测试。它包括三个项目:gtest(构建正常),unittest(构建失败)和perftest(构建失败),以及在构建出错时使用错误1和错误2。无法在Mac OS X上构建rapidjson测试

编译器输出显示以下错误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。

生成文件包括-msse4.2编译器开关以启用SSE4.2支持,并通过寻找头文件揭示了在OS X,既SSE4_1SSE4_2预处理器常数需要为被定义SIDD ...要定义的常量。由于某些原因,这些SIDD ...常量没有被定义。

进一步的研究表明,-msse4开关支持SSE4.1和SSE4.2,所以我试着将开关切换到-msse4,但仍然出错。

不知道如果-msse4.2开关自动定义SSE4_2,但我尝试手动定义它,并且没有运气。

注意:如果您想尝试在Mac上自己构建它,则需要下载不同的预制脚本文件,因为所包含的脚本文件不起作用。你可以在这里的第二篇文章中从附件下载修正的脚本https://code.google.com/p/rapidjson/issues/detail?id=54

关于如何在OS X上成功构建它的任何想法?

回答

0

简短的回答 - 我有一个旧版本的gcc(4.2),它不支持-msse4.2标志(它是在gcc 4.3中引入的)。

升级到GCC的最新版本后,上述问题消失:

  1. 检查其中的gcc版本是活动的,打开一个终端和 运行gcc -v
  2. 下载MacProst安装程序为您的版本从http://www.macports.org/install.php和运行安装程序(简单的方法来升级版本的GCC)
  3. 打开新的终端窗口OS X(必须是新的PATH环境VAR MacPorts的 后更新安装)
  4. 检查你已经安装了哪个版本的gcc,已经安装了port select --list gcc(注意:你可能不会安装一些已经安装的更新版本。见下一步)
  5. sudo port install gcc47安装目前最新版本的gcc(gcc47的)(这将需要一段时间才能下载)
  6. 运行port select --list gcc再次,你应该看到列表中(如新版本。mp-gcc47
  7. 选择这个最新版本为活动的gcc版本与sudo port select gcc mp-gcc47
  8. 运行gcc -v再次检查最新版本是活动

随着排序的编译器,打造rapidjson为release32第一次尝试给了我错误关于由于__int128未针对32位构建定义的限制头文件。 Gnu的官方立场是你需要推出自己的产品。看到更多信息下面的链接答案:

Compiling 32bit binary: expected unqualified-id before '__int128'

建设为release64或debug64解决了这个问题,但它还是没有建立,由于有关test/unittest/readertest.cpp:187:4虚掷预选赛一些警告。由于make文件包含编译器标志-Werror=cast-qual,因此这些警告被视为错误。在unittest和perftest makefiles中删除这个标志解决了这个问题(不是理想的解决方案,但我只是想建立它)。

仍然存在链接器警告,因为/ usr/lib64文件夹不存在,并且makefile包含标记-L/usr/lib64,但构建仍然成功。

成功 - unittest_release_x64_gmake和perftest_release_x64_gmake均顺利运行!

注意:rapidjson构建指令包含在ZIP归档文件的自述文件中。