這個上網搜索多數是英文的,然后我找到了一篇中文的,他講的正是關鍵點:編譯命令(gcc/g++)加了-c參數,比如我的
CC = arm-himix200-linux-gcc CCFLAGS = -Wall -O -g INCLUDE = -I ./include # 可執行文件的名字 TARGET = encJpeg # 鏈接 libmpi.a LIBNAME = -lmpi LIBPATH = -L ./lib #正則表達式表示目錄下所有.c文件, C_SRCS= $(wildcard ./src/*.c) # 第一行依賴關系:冒號后面為依賴的文件,相當於Hello: main.o a.o b.o # 第二行規則:$@表示目標文件,$^表示所有依賴文件,$<表示第一個依賴文件 $(TARGET): $(C_SRCS) $(CC) $(CCFLAGS) $(INCLUDE) $(LIBNAME) $(LIBPATH) -c $^ -o ./build/$@ # make clean刪除所有.o和目標文件 clean: rm -f ./build/*
實際上,gcc的-c選項的意思是:
-c
只激活預處理,編譯,和匯編,也就是他只把程序做成obj文件
例子用法:
gcc -c hello.c
他將生成.o的obj文件
也就是,如果不加-c,默認就直接編譯生成可執行文件了,加上-c就只編譯成目標obj文件,就不往下繼續編譯成可執行文件了。。。。。這些錯誤往往都是不太懂編譯鏈接的程序員搞出來的“奇奇怪怪錯誤”,沒辦法呀,只能一個坑一個坑的踩過去,但是一定要吸取教訓並且總結回顧,系統的補齊自己的基礎知識!
用-c編譯出來的文件:
接下來我們去掉-c,編譯成可執行文件:
【注】mpi庫還用到了海思其他的庫,都需要鏈接進去,下一篇文章中專門解決這個問題
原文鏈接:https://www.crifan.com/resolved_executable_program_can_not_run_on_linux_display_line_1_syntax_error_word_unexpected_expecting_quot/