hadoop winultils项目生成失败-libwinutils.c.u字符串(x)宏中出错

7qhs6swi  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(556)

我正在尝试使用visual studio professional 2015在windows server 2012中构建hadoop 2.7.1源代码。
winutils项目的生成失败,因为libwinutils.c文件中存在错误。我安装了所需的软件并设置了所有的环境变量。或多或少,我遵循了这里的指示:hadoop on windows building/installation error
我注解掉了一行代码并替换了它,如下所示。基本上,我只是将“wsce\u config\u dir”和“wsce\u config\u file”字符串化,但是我去掉了将字符串转换为宽字符的宏的用法,并且成功了。但我真的很想知道为什么原来的代码不起作用。

  1. # define WIDEN_STRING(x) WIDEN_STRING_(x)
  2. # define WIDEN_STRING_(x) L ## x
  3. # define STRINGIFY(x) STRINGIFY_(x)
  4. # define STRINGIFY_(x) #x
  5. # pragma message("WSCE config is " STRINGIFY(WSCE_CONFIG_DIR) "\\" STRINGIFY(WSCE_CONFIG_FILE))
  6. //const WCHAR* wsceConfigRelativePath = WIDEN_STRING(STRINGIFY(WSCE_CONFIG_DIR)) L"\\" WIDEN_STRING(STRINGIFY(WSCE_CONFIG_FILE));
  7. const WCHAR* wsceConfigRelativePath = STRINGIFY(WSCE_CONFIG_DIR) "\\" STRINGIFY(WSCE_CONFIG_FILE);

如有任何评论,我们将不胜感激。
谨致问候,保罗

1zmg4dgp

1zmg4dgp1#

这个问题是一年前发布的。
我不确定问这个问题的人是否解决了这个问题。
然而,对于那些因为同样的错误来到这里的人,我将发布我是如何解决的。
首先,我已经做了步骤什么蒂奥的答案下面的链接。
windows上的hadoop生成/安装错误
然后我改变了libwinutils.c中的代码顺序,如下所示。
(libwinutils.c位于\hadoop common project\hadoop common\src\main\winutils中)
我想用windowsdk7.1cmd构建代码的顺序很重要。
修改:(再修改一个就有意义了)

  1. # define WIDEN_STRING_(x) L ## x
  2. # define WIDEN_STRING(x) WIDEN_STRING_(x)
  3. # define STRINGIFY_(x) #x
  4. # define STRINGIFY(x) STRINGIFY_(x)

原件:

  1. # define WIDEN_STRING(x) WIDEN_STRING_(x)
  2. # define WIDEN_STRING_(x) L ## x
  3. # define STRINGIFY(x) STRINGIFY_(x)
  4. # define STRINGIFY_(x) #x

我执行了“mvn package-pdist,native win-dskiptests”命令。

展开查看全部
gg58donl

gg58donl2#

请按以下方式更改代码(在Windows10中构建hadoop-2.10.0时,它对我有效)

  1. # include <Ntdsapi.h>
  2. # include <malloc.h>
  3. # define WIDEN_STRING(x)
  4. # define STRINGIFY_(x)
  5. # pragma message("WSCE config is " STRINGIFY(WSCE_CONFIG_DIR) "\\" STRINGIFY(WSCE_CONFIG_FILE))
  6. const WCHAR* wsceConfigRelativePath = WIDEN_STRING(STRINGIFY(WSCE_CONFIG_DIR)) L"\\" WIDEN_STRING(STRINGIFY(WSCE_CONFIG_FILE));
cu6pst1q

cu6pst1q3#

我刚刚遇到了一个确切的问题,在挖掘之后,这里是解决问题的方法(我正在构建2.7.2,但我假设2.7.1没有太大区别)。最初的问题是没有定义wsce\u config\u dir和wsce\u config\u file。通常,它们来自项目的预处理器定义,值为$(wsceconfigdir)和$(wsceconfigfile),即这些环境变量的副本。在使用.pom构建hadoop时,这些参数由\hadoop-2.7.2-src\hadoop common project\hadoop common\pom.xml根据该文件前面的配置值wsce.config.dir和wsce.config.file设置。pom中的值是../etc/hadoop和wsce-site.xml。为了解决这个问题,我在libwinutils预处理器定义中用这些值替换了$(wsceconfigdir)和$(wsceconfigfile)。

相关问题