gcc - 文件无法识别:无法识别文件格式

zee*_*zee 6 c makefile

我正在尝试编译一个小项目,但是我得到了这个错误,我一直在搜索,人们得到这个错误主要是因为文件扩展名不正确,但我真的不认为这是原因:

gcc -c -W -Wall -ggdb -I. router.c -o router.o
router.c:106: warning: unused parameter ‘hname’
router.c: In function ‘flood_neighbors’:
router.c:464: warning: unused variable ‘bytes_rcvd’
router.c: At top level:
router.c:536: warning: unused parameter ‘fd’
gcc -c -W -Wall -ggdb -I. link_info.h -o link_info.o
gcc -c -W -Wall -ggdb -I. route.h -o route.o
gcc -c -W -Wall -ggdb -I. sequence.h -o sequence.o
gcc -W -Wall -ggdb -I. router.o link_info.o route.o sequence.o -o router
link_info.o: file not recognized: File format not recognized
collect2: ld returned 1 exit status
make: *** [router] Error 1
Run Code Online (Sandbox Code Playgroud)

和我的make文件看起来像:

CC = gcc
INC = -I.
FLAGS = -W -Wall -ggdb

router: router.o link_info.o route.o sequence.o
        $(CC) $(FLAGS) $(INC) $^ -o $@

router.o: router.c
        $(CC) -c $(FLAGS) $(INC) $< -o $@

sequence.o: sequence.h sequence.h
        $(CC) -c $(FLAGS) $(INC) $< -o $@

link_info.o: link_info.h link_info.c
        $(CC) -c $(FLAGS) $(INC) $< -o $@

route.o: route.h route.c
        $(CC) -c $(FLAGS) $(INC) $< -o $@
Run Code Online (Sandbox Code Playgroud)

我很困惑的是三个目标文件的规则是相同的格式,但为什么只有链接一个叫喊?非常感谢!

CCo*_*der 5

我想建议您对makefile进行一些修改。

CC = gcc
INC = -I.
FLAGS = -W -Wall -ggdb

router: router.o link_info.o route.o sequence.o
        $(CC) $(FLAGS) $(INC) $^ -o $@

router.o: router.c
        $(CC) -c $(FLAGS) $(INC) $< -o $@

sequence.o: sequence.h sequence.h //Where is the c file ?
        $(CC) -c $(FLAGS) $(INC) $< -o $@

link_info.o: link_info.h link_info.c //Change the order. Put c file first and then the header
        $(CC) -c $(FLAGS) $(INC) $< -o $@

route.o: route.h route.c //Same as above
        $(CC) -c $(FLAGS) $(INC) $< -o $@
Run Code Online (Sandbox Code Playgroud)