不能在 Eclipse Neon.3 中同时使用 -std=c++11 和 -l/-L 选项
Cannot use -std=c++11 and -l/-L options at the same time in Eclipse Neon.3
我正在尝试完成 this tutorial on OpenCL, on a Windows 10 dev system which has integrated Intel HD graphics. I have installed Intel's OpenCL SDK。我已将 SDK 安装中的 include
目录添加到 Properties > C/C++ General > Paths and Symbols > Includes
中。我正在使用 MinGW 作为 Eclipse
的编译器
为了应对我第一次尝试编译项目时弹出的许多链接器错误,我在 eclipse 中设置了链接器以指向 opencl.lib
,如 this 答案中所述。
这解决了链接器错误,但教程中有一行令人反感,导致教程样板无法编译:
87 cl_int result = program.build({ device }, "");
像我一样设置,这给了我以下警告和错误:
..\src\main.cpp:93:32: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
..\src\main.cpp:93:45: error: no matching function for call to 'cl::Program::build(<brace-enclosed initializer list>, const char [1])'
如果我没看错(自从 C++11 出现之前我就没有使用过 C++),编译器首先警告我它没有正确识别 {device}
是什么应该是(一个设备向量,其中只有一个条目,在代码的前面初始化)。然后,由于它不识别 {device}
,编译器会出错,因为它找不到 cl::Program::build
的签名,其参数与它正在解释的 {device}
相匹配.
根据警告的建议,我按照 this 答案中给出的说明为编译器添加了 -std=c++11
选项。但是,当我这样做时,链接器错误又回来了。尝试使用这些选项进行编译会导致大约 30 个错误,这些错误基本上都是说它们无法在库文件中找到 CL 调用的任何参考。例如:
C:/Program Files (x86)/Intel/OpenCL SDK/6.3/include/CL/cl.hpp:1753: undefined reference to `clGetPlatformInfo@20'
如何让编译器运行?我想我记得在某个地方读过,命令行中编译器选项的顺序与链接有关,自从我添加了 -std=c++11
选项后,这会不会搞乱我的编译?
我(有点)弄明白了为什么编译器不开心——我 linking 的库是安装在 [base Intel dir]\OpenCL SDK.3\lib\x64
中的用于 OpenCL 的 x64 库,但是(我想?)我的编译器未设置为创建 x64 应用程序。当我 link 到 OpenCL SDK.3\lib\x86
中的 .lib 文件时,我的 linker 错误消失了。
我正在尝试完成 this tutorial on OpenCL, on a Windows 10 dev system which has integrated Intel HD graphics. I have installed Intel's OpenCL SDK。我已将 SDK 安装中的 include
目录添加到 Properties > C/C++ General > Paths and Symbols > Includes
中。我正在使用 MinGW 作为 Eclipse
为了应对我第一次尝试编译项目时弹出的许多链接器错误,我在 eclipse 中设置了链接器以指向 opencl.lib
,如 this 答案中所述。
这解决了链接器错误,但教程中有一行令人反感,导致教程样板无法编译:
87 cl_int result = program.build({ device }, "");
像我一样设置,这给了我以下警告和错误:
..\src\main.cpp:93:32: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
..\src\main.cpp:93:45: error: no matching function for call to 'cl::Program::build(<brace-enclosed initializer list>, const char [1])'
如果我没看错(自从 C++11 出现之前我就没有使用过 C++),编译器首先警告我它没有正确识别 {device}
是什么应该是(一个设备向量,其中只有一个条目,在代码的前面初始化)。然后,由于它不识别 {device}
,编译器会出错,因为它找不到 cl::Program::build
的签名,其参数与它正在解释的 {device}
相匹配.
根据警告的建议,我按照 this 答案中给出的说明为编译器添加了 -std=c++11
选项。但是,当我这样做时,链接器错误又回来了。尝试使用这些选项进行编译会导致大约 30 个错误,这些错误基本上都是说它们无法在库文件中找到 CL 调用的任何参考。例如:
C:/Program Files (x86)/Intel/OpenCL SDK/6.3/include/CL/cl.hpp:1753: undefined reference to `clGetPlatformInfo@20'
如何让编译器运行?我想我记得在某个地方读过,命令行中编译器选项的顺序与链接有关,自从我添加了 -std=c++11
选项后,这会不会搞乱我的编译?
我(有点)弄明白了为什么编译器不开心——我 linking 的库是安装在 [base Intel dir]\OpenCL SDK.3\lib\x64
中的用于 OpenCL 的 x64 库,但是(我想?)我的编译器未设置为创建 x64 应用程序。当我 link 到 OpenCL SDK.3\lib\x86
中的 .lib 文件时,我的 linker 错误消失了。