链接器输入文件的未使用C ++ G ++使文件(Linker input file unused c

2019-09-22 17:17发布

我无法弄清楚是什么原因造成这个错误,我不断收到在做我的项目:

i686-apple-darwin11-llvm-g++-4.2: -lncurses: linker input file unused because linking not done

而我的make文件看起来是这样的:

CC = g++

LIB_FLAGS = -l ncurses

FLAGS = $(LIB_FLAGS)

DEPENDENCIES = window.o element.o

# FINAL OUTPUTS
main: main.cpp $(DEPENDENCIES)
    $(CC) $(FLAGS) -o main.out main.cpp $(DEPENDENCIES)

# MODULES
window.o: main.h classes/window.cpp
    $(CC) $(FLAGS) -c classes/window.cpp

element.o: main.h classes/element.cpp
    $(CC) $(FLAGS) -c classes/element.cpp

# CLEAN
clean:
    rm -rf *.o
    rm main.out

一切编译好的,但我只是好奇,是什么原因造成这种错误消息,这意味着什么..

Answer 1:

不要给链接标志时,您编译(-c标志)的源文件。 就拿这个例子中的makefile看看(如生成文件的文档非常相似)

CPP = g++
CPPFLAGS =-Wall -g
OBJECTS = main.o net.o
PREFIX = /usr/local

.SUFFIXES: .cpp .o

.cpp.o:
        $(CPP) $(CPPFLAGS) -c $<

.o:
        $(CPP) $(CPPFLAGS) $^ -o $@

main: $(OBJECTS)
main.o: main.cpp
net.o: net.cpp net.h


.PHONY:
install: main
        mkdir -p $(PREFIX)/bin
        rm -f $(PREFIX)/bin/main
        cp main $(PREFIX)/bin/main


clean:
        rm -f *.o main


Answer 2:

你逝去的链接选项的编译器调用连同-c ,这意味着连接不执行,从而-l选项不使用。 在你的情况,你的LIB_FLAGS不应该在FLAGS ,但在该规定的,而不是main: ...规则:

main: main.cpp
        $(CC) $(FLAGS) $(LIB_FLAGS) ...


Answer 3:

如已经提及您是在编译阶段通过连接器相关的标志。 通常你需要编译和链接,例如不同的标志

CC = g++

CPPFLAGS = -Wall -g -c -o $@

LDFLAGS = -l ncurses -o $@

DEPENDENCIES = main.o window.o element.o

# FINAL OUTPUTS
main: $(DEPENDENCIES)
    $(CC) $(LDFLAGS) $(DEPENDENCIES)

# MODULES
main.o: main.h main.cpp
    $(CC) $(CPPFLAGS) main.cpp

window.o: main.h classes/window.cpp
    $(CC) $(CPPFLAGS) classes/window.cpp

element.o: main.h classes/element.cpp
    $(CC) $(CPPFLAGS) classes/element.cpp

# CLEAN
clean:
    -rm main $(DEPENDENCIES)


文章来源: Linker input file unused c++ g++ make file