【发布时间】:2021-01-17 00:01:39
【问题描述】:
我的 Makefile 有一个问题,如果出现我不理解的错误,该问题将无法正常工作。
这是错误:
g++ -ISFML/include -c src/gameManager/component.cpp -o obj/Component.o -lsfml-graphics -lsfml-window -lsfml-system -lsfml-main
g++ -ISFML/include -c src/gameManager/gameManager.cpp -o obj/GameManager.o -g obj/Component.o -lsfml-graphics -lsfml-window -lsfml-system -lsfml-main
g++: warning: obj/Component.o: linker input file unused because linking not done
g++ -ISFML/include -c src/main.cpp -o obj/main.o obj/GameManager.o
g++: warning: obj/GameManager.o: linker input file unused because linking not done
g++ -LSFML/lib -o bin/main.exe -g obj/main.o obj/GameManager.o -lsfml-graphics -lsfml-window -lsfml-system -lsfml-main
/usr/bin/ld : ne peut trouver -lsfml-graphics
/usr/bin/ld : ne peut trouver -lsfml-window
/usr/bin/ld : ne peut trouver -lsfml-system
/usr/bin/ld : ne peut trouver -lsfml-main
collect2: error: ld returned 1 exit status
Makefile:14: recipe for target 'all' failed
make: *** [all] Error 1
这是 Makefile :
INCLUDE = -ISFML/include
LIB = -LSFML/lib
LINK_SFML = -lsfml-graphics -lsfml-window -lsfml-system -lsfml-main
ifeq ($(OS),Windows_NT)
LINKER_FLAGS = -lmingw32 $(LINK_SFML)
else
LINKER_FLAGS = $(LINK_SFML)
endif
all : GameManager.o
g++ $(INCLUDE) -c src/main.cpp -o obj/main.o obj/GameManager.o
g++ $(LIB) -o bin/main.exe -g obj/main.o obj/GameManager.o $(LINKER_FLAGS)
GameManager.o : Component.o
g++ $(INCLUDE) -c src/gameManager/gameManager.cpp -o obj/GameManager.o -g obj/Component.o $(LINKER_FLAGS)
Component.o :
g++ $(INCLUDE) -c src/gameManager/component.cpp -o obj/Component.o $(LINKER_FLAGS)
注意:它适用于 W10,但不适用于 Ubuntu Linux。
提前谢谢你。
【问题讨论】:
-
您使用的机器上是否安装了 SFML?顺便说一句,未使用的链接器文件上的警告与链接失败无关。提醒一下,当您使用
-c编译时,无需将链接器标志传递给g++(这意味着:不要进行链接)。 -
-c标志告诉g++创建目标文件,而不是链接。并且编译成目标文件时,其他目标文件不能作为输入。 -
关于
linker input file unused消息,尽管您指定了-c,但您将$(LINKER_FLAGS)传递给编译器事件,这意味着“仅编译 -- 不链接”。 -
根据您的链接器命令
g++ -LSFML/lib ...-lsfml-graphics ...,库libsfml-graphics应该位于SFML/lib或任何系统库目录中。你的 Linux 系统上的库在哪里?请edit你的问题补充信息,不要用cmets来回答。