c++ - Qt:带有 Qt OSX Yosemite "sed: illegal option -- r"错误的 CUDA

标签 c++ qt cuda

我正在使用 Qt Creator 构建一个简单的应用程序,我想在其中利用 CPU 和 GPU 计算来完成任务,然后以 m/s 为单位比较执行时间。

我阅读了很多文章并得出结论,我需要将 NVCC 和 GCC 编译器彼此分开以避免冲突。我关注了this tutorial , 对我的系统进行调整,但是当我编译时我得到一个奇怪的错误:

sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
make: *** [gaussian_cuda.o] Error 1
14:42:46: The process "/usr/bin/make" exited with code 2.

错误显然是从我的 .pro 配置中的这一行抛出的:

2>&1 | sed -r \"s/\\(([0-9]+)\\)/:\\1/g\" 1>&2

我不明白为什么这是非法操作,当我尝试删除这一行时,我的代码完全中断了。

为什么r是非法操作?

编辑 完整的配置代码:

QT       += core gui
QT       += multimedia
QT       += multimediawidgets
QT       += concurrent

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = WebcamFilter
TEMPLATE = app

SOURCES += main.cpp\
           mainwindow.cpp \
           camerafeed.cpp \

HEADERS  += mainwindow.h \
            camerafeed.h

FORMS    += mainwindow.ui

# CUDA Resources
CUDA_SOURCES += gaussian.cu
CUDA_DIR      = /usr/local/cuda
# Path to header and lib files
INCLUDEPATH  += $$CUDA_DIR/include
QMAKE_LIBDIR += $$CUDA_DIR/lib
# Libs used for source code
LIBS         += -lcudart -lcuda
# GPU Architecture
CUDA_ARCH     = sm_20
# Custom flags for nvcc
NVCCFLAGS     = --compiler-options -fno-strict-aliasing -use_fast_math --ptxas-options=-v
# Prepare extra compiler configuration
CUDA_INC      = $$join(INCLUDEPATH,' -I','-I',' ')
cuda.commands = $$CUDA_DIR/bin/nvcc -m64 -O3 -arch=$$CUDA_ARCH -c $$NVCCFLAGS \
                $$CUDA_INC $$LIBS  ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT} \
                2>&1 | sed -r \"s/\\(([0-9]+)\\)/:\\1/g\" 1>&2
cuda.dependency_type = TYPE_C
cuda.depend_command  = $$CUDA_DIR/bin/nvcc -O3 -M $$CUDA_INC $$NVCCFLAGS   ${QMAKE_FILE_NAME}

cuda.input = CUDA_SOURCES
cuda.output = ${OBJECTS_DIR}${QMAKE_FILE_BASE}_cuda.o
# Tell Qt that we want add more stuff to the Makefile
QMAKE_EXTRA_COMPILERS += cuda

最佳答案

正如 Park Young-Bae 所建议的,Mac sed 不等同于 GNU sed,因此标志:

2>&1 | sed -r \"s/\\(([0-9]+)\\)/:\\1/g\" 1>&2

必须修改为:

2>&1 | sed -E \"s/\\(([0-9]+)\\)/:\\1/g\" 1>&2

这解决了问题。

关于c++ - Qt:带有 Qt OSX Yosemite "sed: illegal option -- r"错误的 CUDA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446212/

相关文章:

c++ - cv::gpu::HoughLines 无法正常工作

cuda - 支持 CUDA 中纹理内存的双重类型

C++ 内存没有被回收离开作用域的对象 - 在我束手无策的情况下

C++ "No matching constructor for initialization of"编译器错误

c++ - 使用QXmlFormatter报错FODC0002如何解决?

c++ - 获取默认浏览器用户代理

c++ - VTK 示例不工作 - QVTKOpenGLWidget?

c++ - 我应该汇集 CUDA 流吗?

c# - 面向 future 的大型 UI 应用程序 - 具有 2008 功能包的 MFC 或 C# 和 Winforms?

c++ - UE4 C++ 将字符串转换为 double