我正在将CUDA应用程序从Windows移植到OSX,并且无法进行任何编译。 (最终我试图让Xcode使用自定义构建规则构建我的.cu
源代码,但这是另一个故事[除非有人拥有可与Xcode 5一起使用的更新CUDA插件]。)
以下是终端中发生的事情:
$ nvcc -ccbin /usr/bin/clang -gencode=arch=compute_30,code=\"sm_30,compute_30\" --compile -cudart static -o Visualizer.cu.obj Visualizer.cu
Visualizer.cu:4:10: fatal error: 'array' file not found
#include <array>
^
1 error generated.
$
这里是相关源文件的顶部:
#include "Visualizer.cuh"
#include <iostream>
#include <array>
using namespace std;
#include "CudaHelpers.h"
#include "OpenGLHelpers.h"
#include "GLError.h"
#include "Files.h"
Visualizer::Visualizer(void)
{
/// constructor code removed for brevity
}
Visualizer::~Visualizer(void)
{
}
/// snip
nvcc
似乎无法找到STL array
标头。 (值得注意的是array
似乎是C ++ 11标题,但我不确定这是否相关。)
我觉得奇怪的是它无法找到array
,但iostream
不是问题。
有什么建议吗?使用相同的CUDA SDK版本(5.5)在Win7 x64下构建相同的源文件。
如果它有用的话,我在{i}用于启动env
的同一终端会话中输出nvcc
:
$ env
TERM_PROGRAM=iTerm.app
TERM=xterm
SHELL=/bin/bash
TMPDIR=/var/folders/sw/7xhtxxnd39x8r5zy9tkq94780000gn/T/
Apple_PubSub_Socket_Render=/tmp/launch-JgrEAi/Render
USER=dlively
SSH_AUTH_SOCK=/tmp/launch-HkiDEO/Listeners
__CF_USER_TEXT_ENCODING=0x1F5:0:0
__CHECKFIX1436934=1
PATH=/usr/local/cuda/bin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
PWD=/Users/dlively/projects/thesis/GoLightly/GoLightly
DBUS_LAUNCHD_SESSION_BUS_SOCKET=/tmp/launch-335uC6/unix_domain_listener
LANG=en_US.UTF-8
ITERM_PROFILE=Default
SHLVL=1
COLORFGBG=7;0
HOME=/Users/dlively
DYLD_LIBRARY_PATH=/usr/local/cuda/lib:
ITERM_SESSION_ID=w0t0p0
LOGNAME=my_user_name
_=/usr/bin/env
OLDPWD=/Users/dlively/projects/thesis/GoLightly
$
我想到STL标题/ libs根本没有被任何环境变量引用,但是我不确定那些位于哪里,或者最好的方式(环境变量?{ {1}}?nvcc.profile
命令行选项?)提供该信息。
帮助!
更新
所有CUDA样本都正确构建(通过-I...
)。但是,如果我添加一行
make
到任何源文件(即使在样本中),它也会失败。
更新2
#include <array>
的输出:
nvcc --verbose
答案 0 :(得分:2)
这是C ++ 11标头,在Mac上可用的libstdc ++版本中不可用。请注意,不建议将CUDA运行时库与libc ++链接,因此您应该在CUDA代码中避免使用这些功能。
有关令人困惑的条款的一些细节:
<强>更新强>
注意输出标志“-stdlib = libstdc ++”传递给clang。这就是选择标准库的原因。
答案 1 :(得分:-2)
-Xcompiler="--stdlib=libstdc++"