nvcc 不支持 C++11 函数 iota()?
C++11 function iota() not supported by nvcc?
我试图编译这段代码:-
#include <vector>
using namespace std;
int main() {
vector<int> v(5);
iota(v.begin(), v.end(), 0);
}
我用这个命令编译它:-
D:\workspace\test>nvcc main.cpp --std=c++11
(因为没有指定标准,我得到了 "identifier iota() not found" 错误)
我得到这个错误:-
nvcc warning : The -std=c++11 flag is not supported with the configured host compiler. Flag will be ignored.
main.cpp
main.cpp(7): error C3861: 'iota': identifier not found
如何指定我希望 nvcc 使用的 C++ 标准?
另外,用 g++ 分别编译主机代码,用 nvcc 编译设备代码,然后用 nvcc 链接对象是行不通的。我得到 .
我认为您需要添加 #include <numeric>
。
enter image description here
没有必要。默认情况下,命令行工具 nvcc 使用 Microsoft 的 cl.exe。如果您的 cl.exe 已更新,std 选项将不可用。 cl.exe 自动支持所有最新的 C++ 标准的功能。
但是,在 cl.exe 中,iota() 等一些函数并未在 std 命名空间中定义。相反,iota() 在 numeric.h 头文件中定义。因此,对于 运行 该代码,您需要包含上述头文件。最终代码应如下所示:-
#include <vector>
#include <numeric.h>
using namespace std;
int main() {
vector<int> v(5);
iota(v.begin(), v.end(), 0);
}
代码可以通过命令编译:-
nvcc main.cpp
我试图编译这段代码:-
#include <vector>
using namespace std;
int main() {
vector<int> v(5);
iota(v.begin(), v.end(), 0);
}
我用这个命令编译它:-
D:\workspace\test>nvcc main.cpp --std=c++11
(因为没有指定标准,我得到了 "identifier iota() not found" 错误)
我得到这个错误:-
nvcc warning : The -std=c++11 flag is not supported with the configured host compiler. Flag will be ignored.
main.cpp
main.cpp(7): error C3861: 'iota': identifier not found
如何指定我希望 nvcc 使用的 C++ 标准?
另外,用 g++ 分别编译主机代码,用 nvcc 编译设备代码,然后用 nvcc 链接对象是行不通的。我得到
我认为您需要添加 #include <numeric>
。
enter image description here
没有必要。默认情况下,命令行工具 nvcc 使用 Microsoft 的 cl.exe。如果您的 cl.exe 已更新,std 选项将不可用。 cl.exe 自动支持所有最新的 C++ 标准的功能。
但是,在 cl.exe 中,iota() 等一些函数并未在 std 命名空间中定义。相反,iota() 在 numeric.h 头文件中定义。因此,对于 运行 该代码,您需要包含上述头文件。最终代码应如下所示:-
#include <vector>
#include <numeric.h>
using namespace std;
int main() {
vector<int> v(5);
iota(v.begin(), v.end(), 0);
}
代码可以通过命令编译:-
nvcc main.cpp