Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Hadoop winultils项目生成失败-libwinutils.c字符串(x)宏中出错_C++_Hadoop_Macros - Fatal编程技术网

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

C++ Hadoop winultils项目生成失败-libwinutils.c字符串(x)宏中出错,c++,hadoop,macros,C++,Hadoop,Macros,我正在尝试使用Visual Studio Professional 2015在Windows Server 2012中构建Hadoop 2.7.1源代码 winutils项目的生成失败,因为libwinutils.c文件中存在错误。我安装了所需的软件并设置了所有环境变量。我大致按照这里的指示: 我注释掉了一行代码并替换它,如下所示。基本上,我只是将“WSCE_CONFIG_DIR”和“WSCE_CONFIG_FILE”字符串化,但是我删除了将字符串转换为宽字符的宏的使用,并且成功了。但我真的想

我正在尝试使用Visual Studio Professional 2015在Windows Server 2012中构建Hadoop 2.7.1源代码

winutils项目的生成失败,因为libwinutils.c文件中存在错误。我安装了所需的软件并设置了所有环境变量。我大致按照这里的指示:

我注释掉了一行代码并替换它,如下所示。基本上,我只是将“WSCE_CONFIG_DIR”和“WSCE_CONFIG_FILE”字符串化,但是我删除了将字符串转换为宽字符的宏的使用,并且成功了。但我真的想知道为什么原始代码不起作用

#define WIDEN_STRING(x) WIDEN_STRING_(x)
#define WIDEN_STRING_(x) L ## x
#define STRINGIFY(x) STRINGIFY_(x)
#define STRINGIFY_(x) #x


#pragma message("WSCE config is " STRINGIFY(WSCE_CONFIG_DIR) "\\"  STRINGIFY(WSCE_CONFIG_FILE))
//const WCHAR* wsceConfigRelativePath = WIDEN_STRING(STRINGIFY(WSCE_CONFIG_DIR)) L"\\" WIDEN_STRING(STRINGIFY(WSCE_CONFIG_FILE));
const WCHAR* wsceConfigRelativePath = STRINGIFY(WSCE_CONFIG_DIR) "\\" STRINGIFY(WSCE_CONFIG_FILE);
如有任何评论,将不胜感激

亲切问候,,
保罗

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

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

这个问题是一年前发布的

我不确定问这个问题的人是否解决了这个问题

然而,对于因为同样的错误而来到这里的人,我会发布我是如何解决的

首先,我已经完成了tiho在链接下面回答的步骤

然后我改变了libwinutils.c中的代码顺序,如下所示

(libwinutils.c位于\hadoop公共项目\hadoop公共\src\main\winutils中)

我想使用windowsdk7.1 cmd构建代码的顺序很重要

修订版:(不过,再修订一次才有意义)

原件:

#define WIDEN_STRING(x) WIDEN_STRING_(x)
#define WIDEN_STRING_(x) L ## x
#define STRINGIFY(x) STRINGIFY_(x)
#define STRINGIFY_(x) #x

我执行了“mvn package-Pdist,native win-DskipTests”命令。

这个问题是一年前发布的

我不确定问这个问题的人是否解决了这个问题

然而,对于因为同样的错误而来到这里的人,我会发布我是如何解决的

首先,我已经完成了tiho在链接下面回答的步骤

然后我改变了libwinutils.c中的代码顺序,如下所示

(libwinutils.c位于\hadoop公共项目\hadoop公共\src\main\winutils中)

我想使用windowsdk7.1 cmd构建代码的顺序很重要

修订版:(不过,再修订一次才有意义)

原件:

#define WIDEN_STRING(x) WIDEN_STRING_(x)
#define WIDEN_STRING_(x) L ## x
#define STRINGIFY(x) STRINGIFY_(x)
#define STRINGIFY_(x) #x

我执行了“mvn package-Pdist,native win-DskipTests”命令。

请按如下所示更改代码 (在Windows 10中构建HADOOP-2.10.0时,它对我很有用)

#包括
#包括
#定义U字符串(x)
#定义字符串化(x)
#pragma消息(“WSCE配置为”STRINGIFY(WSCE\u config\u DIR)“\\”STRINGIFY(WSCE\u config\u文件))
const WCHAR*wsceConfigRelativePath=加宽字符串(STRINGIFY(WSCE\u CONFIG\u DIR))L“\\”加宽字符串(STRINGIFY(WSCE\u CONFIG\u FILE));

请按以下方式更改代码 (在Windows 10中构建HADOOP-2.10.0时,它对我很有用)

#包括
#包括
#定义U字符串(x)
#定义字符串化(x)
#pragma消息(“WSCE配置为”STRINGIFY(WSCE\u config\u DIR)“\\”STRINGIFY(WSCE\u config\u文件))
const WCHAR*wsceConfigRelativePath=加宽字符串(STRINGIFY(WSCE\u CONFIG\u DIR))L“\\”加宽字符串(STRINGIFY(WSCE\u CONFIG\u FILE));

您收到的确切错误消息是什么(如果有多条,请先收到一条),以及哪行代码?您好@V-R,感谢您的快速回复。有问题的一行是这样的:
code const WCHAR*wsceconfiggreativepath=wired\u STRING(STRINGIFY(WSCE\u CONFIG\u DIR))L“\\”wired\u STRING(STRINGIFY(WSCE\u CONFIG\u FILE)),在错误列表中:标识符“L”未定义。应为“;”。生成错误相同:C2065:“L”:未声明的标识符。C2099:初始值设定项不是常量。C2143:语法错误:缺少“;”在“string”之前,您得到的确切错误消息是什么(如果有多条,则取第一条),以及哪行代码?您好@V-R,感谢您的快速响应。有问题的一行是这样的:
code const WCHAR*wsceconfiggreativepath=wired\u STRING(STRINGIFY(WSCE\u CONFIG\u DIR))L“\\”wired\u STRING(STRINGIFY(WSCE\u CONFIG\u FILE)),在错误列表中:标识符“L”未定义。应为“;”。生成错误相同:C2065:“L”:未声明的标识符。C2099:初始值设定项不是常量。C2143:语法错误:缺少“;”嗨,乔恩,谢谢你的回答。实际上,我的解决方法只是避免调用宏字符串。当您传递变量而不是文本字符串时,它似乎无法正常工作。示例\u字符串(变量\u X)-->不起作用。加宽字符串(“大家好”)-->。我想这就是为什么你的解决方案也会失败的原因
#include <Ntdsapi.h>
#include <malloc.h>

#define WIDEN_STRING(x)
#define STRINGIFY_(x)



#pragma message("WSCE config is " STRINGIFY(WSCE_CONFIG_DIR) "\\" STRINGIFY(WSCE_CONFIG_FILE))
const WCHAR* wsceConfigRelativePath = WIDEN_STRING(STRINGIFY(WSCE_CONFIG_DIR)) L"\\" WIDEN_STRING(STRINGIFY(WSCE_CONFIG_FILE));