无法将文件标记为可执行文件 (?)
Cannot mark file as executable (?)
[注意:] 我首先认为问题是由 CUDA 引起的,但这只是因为我的文件系统(见答案) - 所以这可能属于任何程序,如果其他人卡在这里。
问题
在 CUDA 的帮助下,我尝试在 Ubuntu 上使用我的 NVIDIA-GPU 进行编程。
当我编译时一切正常 - 没有错误,没有警告。但最后我得到了一个我无法打开的可执行文件,我收到消息 Permission denied。当我检查访问权限时,我发现该文件不是 "marked as executable"。如果我尝试设置它,该框会立即再次取消选中。甚至像
这样的命令
sudo chmod +x ./myprogram
不起作用(权限保持不变)。
我做了什么
我安装了
sudo apt-get install nvidia-cuda-dev nvidia-cuda-toolkit
之后
sudo apt-get install build-essential freeglut3-dev libgl1-mesa-glx libglu1-mesa-dev libx11-dev libxi-dev libxmu-dev
代码本身应该没问题,因为它在所有其他机器上都能完美运行,但在我的 Ubuntu/GPU 组合 (?) 上不行。
根据CMakesLists.txt
cmake_minimum_required(VERSION 2.8)
project( gpuSobel )
find_package( CUDA REQUIRED)
find_package( OpenCV REQUIRED )
if (CUDA_FOUND)
message("CUDA found!")
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -O3 -lineinfo -gencode arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -gencode=arch=compute_35,code=compute_35)
set(CUDASRCS
main.cu
)
CUDA_ADD_EXECUTABLE(gpuSobel ${CUDASRCS})
else()
message("CUDA not found, abort")
endif()
set(CMAKE_CXX_FLAGS "-g -Wall")
# SSE support
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -msse2 -msse3")
endif()
target_link_libraries( gpuSobel ${OpenCV_LIBS} )
add_custom_command(TARGET gpuSobel POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/images
$<TARGET_FILE_DIR:gpuSobel>/images)
请大神赐教,为什么 sudo
在这里也无能为力,是编译错误还是 Linux 错误?
你见过http://bikulov.org/blog/2013/12/24/example-of-cmake-file-for-cuda-plus-cpp-code/吗??
我总是使用他们的 Cmake 代码。
我发现我是 compiling/accessing 不支持访问权限的分区上的编译文件。当我将它复制到我的主目录 (~/
) 时,我可以设置访问权限并在之后执行该文件。
感谢您的帮助。
[注意:] 我首先认为问题是由 CUDA 引起的,但这只是因为我的文件系统(见答案) - 所以这可能属于任何程序,如果其他人卡在这里。
问题
在 CUDA 的帮助下,我尝试在 Ubuntu 上使用我的 NVIDIA-GPU 进行编程。
当我编译时一切正常 - 没有错误,没有警告。但最后我得到了一个我无法打开的可执行文件,我收到消息 Permission denied。当我检查访问权限时,我发现该文件不是 "marked as executable"。如果我尝试设置它,该框会立即再次取消选中。甚至像
这样的命令sudo chmod +x ./myprogram
不起作用(权限保持不变)。
我做了什么
我安装了
sudo apt-get install nvidia-cuda-dev nvidia-cuda-toolkit
之后
sudo apt-get install build-essential freeglut3-dev libgl1-mesa-glx libglu1-mesa-dev libx11-dev libxi-dev libxmu-dev
代码本身应该没问题,因为它在所有其他机器上都能完美运行,但在我的 Ubuntu/GPU 组合 (?) 上不行。
根据CMakesLists.txt
cmake_minimum_required(VERSION 2.8)
project( gpuSobel )
find_package( CUDA REQUIRED)
find_package( OpenCV REQUIRED )
if (CUDA_FOUND)
message("CUDA found!")
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -O3 -lineinfo -gencode arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -gencode=arch=compute_35,code=compute_35)
set(CUDASRCS
main.cu
)
CUDA_ADD_EXECUTABLE(gpuSobel ${CUDASRCS})
else()
message("CUDA not found, abort")
endif()
set(CMAKE_CXX_FLAGS "-g -Wall")
# SSE support
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -msse2 -msse3")
endif()
target_link_libraries( gpuSobel ${OpenCV_LIBS} )
add_custom_command(TARGET gpuSobel POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/images
$<TARGET_FILE_DIR:gpuSobel>/images)
请大神赐教,为什么 sudo
在这里也无能为力,是编译错误还是 Linux 错误?
你见过http://bikulov.org/blog/2013/12/24/example-of-cmake-file-for-cuda-plus-cpp-code/吗?? 我总是使用他们的 Cmake 代码。
我发现我是 compiling/accessing 不支持访问权限的分区上的编译文件。当我将它复制到我的主目录 (~/
) 时,我可以设置访问权限并在之后执行该文件。
感谢您的帮助。