为什么我得到 "nvcc fatal : redefinition of argument 'optimize'"?
Why am I getting "nvcc fatal : redefinition of argument 'optimize'"?
我正在尝试在 MacBook Pro Retina 上使用 CUDA 驱动程序版本:7.0.36 和 cuda 工具包 7.0 在 nVidia GT 750 M 上进行编译,以下代码及其 makefile 但它给了我这个错误:
nvcc fatal : redefinition of argument 'optimize'.
尽管我已经能够使用 nvcc、makefile 等编译和执行其他程序,但现在我不能。
此外,我还没有找到关于这个错误的有用信息,所以我在这里询问是否有人知道如何解决它。我是 CUDA 的新手,所以如果您需要更多信息,请询问。
这是我的 Makefile.inc
:
CXX := nvcc
OPTIM := -O3
DEBUG := -g -DOLB_DEBUG
CXXFLAGS := $(OPTIM)
ARPRG := ar
LDFLAGS := -O3
PARALLEL_MODE := OFF
OMPFLAGS := -fopenmp
BUILDTYPE := precompiled
INPUTDIR := ./input
OUTPUTDIR := ./output
INCDIR := ./inc
OBJDIR := ./obj
SRCDIR := ./HeatTransfer
BINDIR := ./bin
###########################################################################
## defines shell
SHELL := /bin/sh
和 Makefile
:
###########################################################################
ROOT := .
include $(ROOT)/Makefile.inc
######################################################## Operational system
OS = $(shell uname -s)
MACH = $(shell uname -m)
HOST = $(shell uname -n)
WHOAMI = $(shell whoami )
###########################################################################
HeatTransfer := \
mesh\
stack
PROGRAM := $(BINDIR)/program
###########################################################################
OBJECTS := $(foreach file, $(HeatTransfer), $(OBJDIR)/$(file).o)
###########################################################################
all : compile link
###########################################################################
compile : $(OBJECTS)
$(OBJDIR)/%.o: $(SRCDIR)/%.cu
@echo Compile $<
$(CXX) $(CXXFLAGS) -I$(INCDIR) -c $< -o $@
###########################################################################
link: $(PROGRAM)
$(PROGRAM): $(OBJECTS)
@echo Link $@
$(CXX) $(LDFLAGS) -I$(INCDIR) $(foreach file, $(HeatTransfer), $(OBJDIR)/$(file).o) $(LDFLAGS) -I$(INCDIR) -o $@
###########################################################################
clean : cleanprog cleanobj
cleanprog:
@echo Clean rubbish files
@rm -f *~ core .tmpfile $(PROGRAM)
cleanobj:
@echo Clean object files
@rm -f $(OBJECTS)
###########################################################################
###########################################################################
我尝试编译时的完整信息是这样的:
...Heat_Transfer_CUDA$ make
Compile HeatTransfer/mesh.cu
nvcc -O3 -I./inc -c HeatTransfer/mesh.cu -o obj/mesh.o
Compile HeatTransfer/stack.cu
nvcc -O3 -I./inc -c HeatTransfer/stack.cu -o obj/stack.o
Link bin/program
nvcc -O3 -I./inc ./obj/mesh.o ./obj/stack.o -O3 -I./inc -o bin/program
nvcc fatal : redefinition of argument 'optimize'
make: *** [bin/program] Error 1
问题是由于您的 link 命令指定 -O3
开关 两次:
nvcc -O3 -I./inc ./obj/mesh.o ./obj/stack.o -O3 -I./inc -o bin/program
^^^ ^^^
这是不允许的 - 它会产生那个错误。
问题似乎是由于您的 makefile
在此处指定使用 LDFLAGS
twice:
$(CXX) $(LDFLAGS) -I$(INCDIR) $(foreach file, $(HeatTransfer), $(OBJDIR)/$(file).o) $(LDFLAGS) -I$(INCDIR) -o $@
这应该不是必需的。像这样:
$(CXX) $(LDFLAGS) -I$(INCDIR) $(foreach file, $(HeatTransfer), $(OBJDIR)/$(file).o) -o $@
应该可以解决这个问题。
我正在尝试在 MacBook Pro Retina 上使用 CUDA 驱动程序版本:7.0.36 和 cuda 工具包 7.0 在 nVidia GT 750 M 上进行编译,以下代码及其 makefile 但它给了我这个错误:
nvcc fatal : redefinition of argument 'optimize'.
尽管我已经能够使用 nvcc、makefile 等编译和执行其他程序,但现在我不能。
此外,我还没有找到关于这个错误的有用信息,所以我在这里询问是否有人知道如何解决它。我是 CUDA 的新手,所以如果您需要更多信息,请询问。
这是我的 Makefile.inc
:
CXX := nvcc
OPTIM := -O3
DEBUG := -g -DOLB_DEBUG
CXXFLAGS := $(OPTIM)
ARPRG := ar
LDFLAGS := -O3
PARALLEL_MODE := OFF
OMPFLAGS := -fopenmp
BUILDTYPE := precompiled
INPUTDIR := ./input
OUTPUTDIR := ./output
INCDIR := ./inc
OBJDIR := ./obj
SRCDIR := ./HeatTransfer
BINDIR := ./bin
###########################################################################
## defines shell
SHELL := /bin/sh
和 Makefile
:
###########################################################################
ROOT := .
include $(ROOT)/Makefile.inc
######################################################## Operational system
OS = $(shell uname -s)
MACH = $(shell uname -m)
HOST = $(shell uname -n)
WHOAMI = $(shell whoami )
###########################################################################
HeatTransfer := \
mesh\
stack
PROGRAM := $(BINDIR)/program
###########################################################################
OBJECTS := $(foreach file, $(HeatTransfer), $(OBJDIR)/$(file).o)
###########################################################################
all : compile link
###########################################################################
compile : $(OBJECTS)
$(OBJDIR)/%.o: $(SRCDIR)/%.cu
@echo Compile $<
$(CXX) $(CXXFLAGS) -I$(INCDIR) -c $< -o $@
###########################################################################
link: $(PROGRAM)
$(PROGRAM): $(OBJECTS)
@echo Link $@
$(CXX) $(LDFLAGS) -I$(INCDIR) $(foreach file, $(HeatTransfer), $(OBJDIR)/$(file).o) $(LDFLAGS) -I$(INCDIR) -o $@
###########################################################################
clean : cleanprog cleanobj
cleanprog:
@echo Clean rubbish files
@rm -f *~ core .tmpfile $(PROGRAM)
cleanobj:
@echo Clean object files
@rm -f $(OBJECTS)
###########################################################################
###########################################################################
我尝试编译时的完整信息是这样的:
...Heat_Transfer_CUDA$ make
Compile HeatTransfer/mesh.cu
nvcc -O3 -I./inc -c HeatTransfer/mesh.cu -o obj/mesh.o
Compile HeatTransfer/stack.cu
nvcc -O3 -I./inc -c HeatTransfer/stack.cu -o obj/stack.o
Link bin/program
nvcc -O3 -I./inc ./obj/mesh.o ./obj/stack.o -O3 -I./inc -o bin/program
nvcc fatal : redefinition of argument 'optimize'
make: *** [bin/program] Error 1
问题是由于您的 link 命令指定 -O3
开关 两次:
nvcc -O3 -I./inc ./obj/mesh.o ./obj/stack.o -O3 -I./inc -o bin/program
^^^ ^^^
这是不允许的 - 它会产生那个错误。
问题似乎是由于您的 makefile
在此处指定使用 LDFLAGS
twice:
$(CXX) $(LDFLAGS) -I$(INCDIR) $(foreach file, $(HeatTransfer), $(OBJDIR)/$(file).o) $(LDFLAGS) -I$(INCDIR) -o $@
这应该不是必需的。像这样:
$(CXX) $(LDFLAGS) -I$(INCDIR) $(foreach file, $(HeatTransfer), $(OBJDIR)/$(file).o) -o $@
应该可以解决这个问题。