대학에서 OpenGL 및 CUDA 코드가 포함 된 프로그램을 작성 중이며 우분투 리눅스에서 실행할 수 있습니다. 이 프로그램은 많은 의존성을 가지고 있으므로 메이크 파일을 사용하고 리눅스를 사용하는 대학에있을 때 아무런 문제가 없습니다. 어제는 집에서 MacBook에서 실행하려고 시도했지만 실행되지 않았습니다. 내가 제대로 라이브러리 경로를 설정,하지만 난 다음 줄 수 메이크 사용하여 컴파일 할 때 :Mac OS X에서 CUDA + OpenGL 프로그램을 컴파일 할 수 없습니다. El Capitan
MBP-di-Nicolo:MATRIX_TEST Nico$ make
/Developer/NVIDIA/CUDA-7.5/bin/nvcc -ccbin g++ -m64 -Xcompiler -g -Xcompiler -arch -Xcompiler x86_64 -g -G -Xlinker -rpath -Xlinker /Developer/NVIDIA/CUDA-7.5/lib -Xlinker -framework -Xlinker GLUT -o Matrix_test my_utils2.o Matrix_test.o Matrix.o -L/System/Library -L/System/Library/Frameworks/OpenGL.framework/Libraries -lGL -lGLU ../../common/lib/darwin/libGLEW.a -L. -lrt
nvlink fatal : Could not find fatbin in 'my_utils2.o'
nvlink fatal : elfLink internal error
make: *** [Matrix_test] Error 1
MBP-di-Nicolo:MATRIX_TEST Nico$
을 여기에 메이크 :
PROGNAME = Matrix_test
#PROGNAME2 = read_file
CC = g++
include ./findcudalib.mk
# Location of the CUDA Toolkit
CUDA_PATH ?= /Developer/NVIDIA/CUDA-7.5
#DEK_SRC = ../pure-dek/src
#DEK_INCLUDE = -I../pure-dek/include
# internal flags
NVCCFLAGS := -m${OS_SIZE}
#NVCCFLAGS := -m${OS_SIZE} --keep
CCFLAGS := -g
NVCCLDFLAGS := -g -G
LDFLAGS :=
# Extra user flags
EXTRA_NVCCFLAGS ?=
EXTRA_NVCCLDFLAGS ?=
EXTRA_LDFLAGS ?=
EXTRA_CCFLAGS ?=
# OS-specific build flags
ifneq ($(DARWIN),)
LDFLAGS += -rpath $(CUDA_PATH)/lib
CCFLAGS += -arch $(OS_ARCH) $(STDLIB)
else
ifeq ($(OS_ARCH),armv7l)
ifeq ($(abi),gnueabi)
CCFLAGS += -mfloat-abi=softfp
else
# default to gnueabihf
override abi := gnueabihf
LDFLAGS += --dynamic-linker=/lib/ld-linux-armhf.so.3
CCFLAGS += -mfloat-abi=hard
endif
endif
endif
ifeq ($(ARMv7),1)
NVCCFLAGS += -target-cpu-arch ARM
ifneq ($(TARGET_FS),)
CCFLAGS += --sysroot=$(TARGET_FS)
LDFLAGS += --sysroot=$(TARGET_FS)
LDFLAGS += -rpath-link=$(TARGET_FS)/lib
LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib
LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib/arm-linux-$(abi)
endif
endif
# Debug build flags
ifeq ($(dbg),1)
NVCCFLAGS += -g -G
TARGET := debug
else
TARGET := release
endif
ALL_CCFLAGS :=
ALL_CCFLAGS += $(NVCCFLAGS)
ALL_CCFLAGS += $(addprefix -Xcompiler ,$(CCFLAGS))
ALL_CCFLAGS += $(EXTRA_NVCCFLAGS)
ALL_CCFLAGS += $(addprefix -Xcompiler ,$(EXTRA_CCFLAGS))
ALL_LDFLAGS :=
ALL_LDFLAGS += $(ALL_CCFLAGS)
ALL_LDFLAGS += $(NVCCLDFLAGS)
ALL_LDFLAGS += $(addprefix -Xlinker ,$(LDFLAGS))
ALL_LDFLAGS += $(EXTRA_NVCCLDFLAGS)
ALL_LDFLAGS += $(addprefix -Xlinker ,$(EXTRA_LDFLAGS))
# Common includes and paths for CUDA
EXT_LIB = /System/Library
INCLUDES :=
LIBRARIES := -L$(EXT_LIB)
# Makefile include to help find GL Libraries
EXEC ?=
include ./findgllib.mk
# OpenGL specific libraries
ifneq ($(DARWIN),)
# Mac OSX specific libraries and paths to include
LIBRARIES += -L/System/Library/Frameworks/OpenGL.framework/Libraries
LIBRARIES += -lGL -lGLU ../../common/lib/darwin/libGLEW.a
ALL_LDFLAGS += -Xlinker -framework -Xlinker GLUT
else
LIBRARIES += -L../../common/lib/$(OSLOWER)/$(OS_ARCH) $(GLLINK)
#LIBRARIES += -lglfw3 -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl -lGLEW -lglut -lGLU
LIBRARIES += -lglui -lglut -lGLU -lGL -lX11 -lXi -lXmu -lGLEW
endif
################################################################################
# CUDA code generation flags
ifneq ($(OS_ARCH),armv7l)
GENCODE_SM10 := -gencode arch=compute_11,code=sm_11
endif
GENCODE_SM10 := -gencode arch=compute_11,code=sm_11
GENCODE_SM20 := -gencode arch=compute_20,code=sm_20
GENCODE_SM30 := -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=\"sm_35,compute_35\"
GENCODE_FLAGS := $(GENCODE_SM11) $(GENCODE_SM20) $(GENCODE_SM30)
################################################################################
# Target rules
all: build
build: $(PROGNAME)
my_utils2.o: my_utils2.cu my_utils2.h
$(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o [email protected] -c $<
Matrix.o: Matrix.cu Matrix.h my_utils2.h
$(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o [email protected] -c $<
Matrix_test.o: Matrix_test.cu my_utils2.h
$(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o [email protected] -c $<
$(PROGNAME): my_utils2.o Matrix_test.o Matrix.o
$(NVCC) $(ALL_LDFLAGS) -o [email protected] $+ $(LIBRARIES) -L. -lrt
mkdir -p ./bin/$(OS_ARCH)/$(OSLOWER)/$(TARGET)$(if $(abi),/$(abi))
cp [email protected] ./bin/$(OS_ARCH)/$(OSLOWER)/$(TARGET)$(if $(abi),/$(abi))
run: build
./$(PROGNAME)
clean:
rm -f *.o
# rm -rf ./bin/$(OS_ARCH)/$(OSLOWER)/$(TARGET)$(if $(abi),/$(abi))/mergeSort
clobber: clean
내가 리눅스에 사용되는 메이크 파일을 수정하지 않았다, 두 줄을 제외하고는 다음과 같습니다 (이전은 오래된 것입니다) :
# Location of the CUDA Toolkit
CUDA_PATH ?= "/usr/local/cuda-7.5"
# Common includes and paths for CUDA
EXT_LIB = /usr/local/lib
제발 도와 주실 수 있습니까?
감사합니다.
나는 생각하지 않는다 g ++있는 [맥 OS에서 CUDA 7.5에 대한 지원 컴파일러 (http://docs.nvidia.com/cuda/cuda -installation-guide-mac-os-x/index.html # 시스템 요구 사항). Mac 개발에 익숙하지 않아서, g ++을 호출하는 Makefile이 어떻게 든 후드에서 clang을 호출한다면이 주석을 무시할 수 있습니다. 그러나'-ccbin clang ++'이 아닌'-ccbin g ++' [here] (http://i.stack.imgur.com/FZ04A.png) –
my_utils2.o와 다른 .o 파일을 컴파일하는 cmline은 무엇입니까? 나는 당신이 그들을 연결하는 방법의 cmdline만을 볼 수있다. – kangshiyin