我正在編寫CUDA代碼,並使用下面的Makefile來編譯和鏈接在一起。g ++編譯的二進制文件給「不能執行二進制文件」
DEBUG = TRUE
CUDA_PATH = /usr/local/cuda
INC_DIR = ../include
ICC = -I/usr/include -I$(INC_DIR) -I$(CUDA_PATH)/include
LIB_CUDA = -L$(CUDA_PATH)/lib64
NVCC = $(CUDA_PATH)/bin/nvcc
LINT = cppcheck
LINK = $(NVCC)
CXX = g++
C_SOURCES = main.c
CUDA_SOURCES = cuda_r_lib.cu
EXE = r_lib
OBJS = main.o
CUDA_OBJS = cuda_r_lib.o
HFILES = $(INC_DIR)/r_lib.h
MAKEFILE = Makefile
REBUILDABLES = $(CUDA_OBJS) $(OBJS) r_lib
LFLAGS = -lcuda $(LIB_CUDA)
ifdef DEBUG
CFLAGS = -Wall -ggdb -pthread -fPIC -O3
CDEFINES = $(ICC)
CUDA_FLAGS = -arch=sm_20 $(ICC)
else
CFLAGS = -Wall -pthread -fPIC -O3
CDEFINES = $(ICC) -DNDEBUG=1
CUDA_FLAGS = -arch=sm_20 $(ICC)
endif
$(EXE): $(OBJS) $(CUDA_OBJS)
$(LINK) $(LFLAGS) $(OBJS) $(CUDA_OBJS) -o $(EXE)
$(OBJS): $(C_SOURCES) $(HFILES) $(MAKEFILE)
$(CXX) $(CDEFINES) $(CFLAGS) -c $(C_SOURCES) -o [email protected]
$(CUDA_OBJS): $(CUDA_SOURCES) $(HFILES) $(MAKEFILE)
$(NVCC) $(CUDA_FLAGS) -c $(CUDA_SOURCES) -o [email protected]
clean:
rm -f *~ $(REBUILDABLES) *ii core
lint:
$(LINT) --enable=all --inconclusive --std=posix *.c *.cu
我已經到了我的代碼編譯和鏈接乾淨的地步。但二進制./r_lib不執行。我甚至不能改變它的權限(嘗試使用chmod + X ...)
這裏就是我得到:
[email protected]:/media/rinka/CUDA/dev/code$ make
g++ -I/usr/include -I../include -I/usr/local/cuda/include -Wall -ggdb -pthread -fPIC -O3 -c main.c -o main.o
/usr/local/cuda/bin/nvcc -arch=sm_20 -I/usr/include -I../include -I/usr/local/cuda/include -c cuda_r_lib.cu -o cuda_r_lib.o
/usr/local/cuda/bin/nvcc -lcuda -L/usr/local/cuda/lib64 main.o cuda_r_lib.o -o r_lib
[email protected]:/media/rinka/CUDA/dev/code$ ll ./r_lib
-rw------- 1 rinka rinka 552223 Nov 6 19:08 ./r_lib
[email protected]:/media/rinka/CUDA/dev/code$ file r_lib
r_lib: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=8f2b88bf570a5d74c2c237969a93519f64636b86, not stripped
[email protected]:/media/rinka/CUDA/dev/code$ ./r_lib
bash: ./r_lib: Permission denied
[email protected]:/media/rinka/CUDA/dev/code$ chmod +x ./r_lib
[email protected]:/media/rinka/CUDA/dev/code$ ./r_lib
bash: ./r_lib: Permission denied
[email protected]:/media/rinka/CUDA/dev/code$ ll ./r_lib
-rw------- 1 rinka rinka 552223 Nov 6 19:08 ./r_lib
我不能爲我的生命找出我做錯了什麼 - 也許我只是累了。我看了看:gcc compiled binaries give "cannot execute binary file",但我不使用-c選項,而聯......
也 - 對NVCC編譯器&連接選項,這將有助於扔了警告,更嚴格的將是非常歡迎任何反饋。我對目前爲止的警告並不滿意。
您使用'g ++'爲.c文件? –
這是另一個問題。不要將C++編譯器用於C代碼(反之亦然)。這是兩種不同的語言。如果您編寫C++ cpde,請使用標準名稱後綴,例如'.cpp'。 – Olaf
完成。謝謝。 –