這個上網搜尋多數是英文的,然後我找到了一篇中文的,他講的正是關鍵點:編譯指令(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庫還用到了海思其他的庫,都需要連結進去,下一篇文章中專門解決這個問題