海思osd+freetype+SDL+SDL_ttf編譯成功後,Makefile的編寫

    請先移步我的上一篇轉載博文http://blog.csdn.net/qq_26671365/article/details/78974661,這裏先感謝一下博文的原創者,使我受益匪淺。

這裏假設你已經裝好freetype,SDL還有SDL_ttf

 arm-hisiv400-linux-gcc test.c`sdl-config --cflags --libs`-I/opt/sdl_lib/include-I/opt/sdl_lib/include/SDL-L/opt/sdl_lib/lib-lSDL-lSDL_ttf-Wl,-rpath-o test

上面的命令是編譯SDL 測試文件的shell語句,經測試可用。但是最後我們的目的還是要在海思的demo或者自己編寫的app中使用SDL,我把以上語句單獨

放在Makefile中可以編譯SDL測試demo。那麼怎麼把這條語句加入海思的Makefile中,以便我們方便在海思的demo中使用SDL呢?

先看一看海思的Makefile吧

# Hisilicon Hi3516 sample Makefile


include ../Makefile.param
#ifeq ($(SAMPLE_PARAM_FILE), )
#     SAMPLE_PARAM_FILE:=../Makefile.param
#     include $(SAMPLE_PARAM_FILE)
#endif


# target source
SRC  := $(wildcard *.c) 
OBJ  := $(SRC:%.c=%.o)


TARGET := $(OBJ:%.o=%)
.PHONY : clean all


all: $(TARGET)


MPI_LIBS := $(REL_LIB)/libmpi.a


$(TARGET):%:%.o $(COMM_OBJ)
$(CC) $(CFLAGS) -lpthread -lm -o $@ $^ $(MPI_LIBS) $(AUDIO_LIBA) $(SENSOR_LIBS)


clean:
@rm -f $(TARGET)
@rm -f $(OBJ)
@rm -f $(COMM_OBJ)


cleanstream:
@rm -f *.h264
@rm -f *.jpg
@rm -f *.mjp
@rm -f *.mp4

核心是這一句,$(TARGET):%:%.o $(COMM_OBJ)
$(CC) $(CFLAGS) -lpthread -lm -o $@ $^ $(MPI_LIBS) $(AUDIO_LIBA) $(SENSOR_LIBS)

我有試過將SDL的編譯語句加入這句話中,但是行不通。

現在來稍微分析下這一段Makefile語句。

$(TARGET):%:%.o $(COMM_OBJ)的意思是$(TARGET)的生成依賴於所有的.o文件和COMM文件夾下面的.obj文件

這個Makefile包含了其他目錄的Makefile.param,總共包含了兩層。查看.param文件可以看到

$(CC)的值爲arm-hisiv500-linux-gcc

$(CFLAGS)包含了所有的編譯選項、包含文件路徑、鏈接動態庫,靜態庫路徑,其中也包含了-lpthread和-lm,所以把後面的-lpthread與-lm去掉也沒問題,這個應該是

海思開發人員的一點點疏漏。

$(MPI_LIBS) $(AUDIO_LIBA) $(SENSOR_LIBS這三項是具體的附加依賴庫庫名稱

我們再看一下SDL的編譯語句

arm-hisiv400-linux-gcc test.c`sdl-config --cflags --libs`

-I/opt/sdl_lib/include-I/opt/sdl_lib/include/SDL-L/opt/sdl_lib/lib-lSDL-lSDL_ttf-Wl,-rpath-o test

$(CC)=arm-hisiv400-linux-gcc,這個不用管他了

`sdl-config --cflags --libs`加在$(CFLAGS)中(在.param文件中加)

-I/opt/sdl_lib/include-I/opt/sdl_lib/include/SDL也加在$(CFLAGS)中(在.param文件中相應位置加)

-lSDL-lSDL_ttf-Wl,-rpath也加在$(CFLAGS)中

-L/opt/sdl_lib/lib要稍微注意下,修改後變成這樣(也是在Makefile.param中修改)

export SDL_LIBA ?= /opt/sdl_lib/lib/libfreetype.a\
/opt/sdl_lib/lib/libSDL.a\
/opt/sdl_lib/lib/libSDL_ttf.a
export SDL_LIBS ?= /opt/sdl_lib/lib/libfreetype.so\
  /opt/sdl_lib/lib/libSDL.so\
  /opt/sdl_lib/lib/libSDL_ttf.so

最終這一句Makefile語句修改成

$(TARGET):%:%.o $(COMM_OBJ)
$(CC) $(CFLAGS) -o $@ $^ $(MPI_LIBS) $(AUDIO_LIBA) $(SENSOR_LIBS) $(SDL_LIBA) $(SDL_LIBS)

其他的地方不用改。

最後給大家看一下展開後的編譯語句

arm-hisiv400-linux-gcc -Wall -g `sdl-config --cflags --libs` -I/home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common -I/opt/sdl_lib/include -I/opt/sdl_lib/include/SDL -I/home/ach/Hi3516A_SDK_V2.0.7.0/mpp/include -I/home/ach/Hi3516A_SDK_V2.0.7.0/mpp/component/acodec -I/home/ach/Hi3516A_SDK_V2.0.7.0/mpp/extdrv/tw2865 -I/home/ach/Hi3516A_SDK_V2.0.7.0/mpp/extdrv/tlv320aic31 -I/home/ach/Hi3516A_SDK_V2.0.7.0/mpp/extdrv/ak7756en -Dhi3516a -DHICHIP=0x3516A100 -DSENSOR_TYPE=PANASONIC_MN34220_SUBLVDS_720P_120FPS -DHI_RELEASE -DHI_XXXX -lpthread -lm -ldl -lSDL -lSDL_ttf -Wl,-rpath -DISP_V2 -DHI_ACODEC_TYPE_INNER -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -ffunction-sections -mno-unaligned-access -fno-aggressive-loop-optimizations -ldl -o appmain appmain.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common/sample_comm_vpss.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common/sample_comm_sys.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common/sample_comm_isp.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common/sample_comm_audio.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common/loadbmp.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common/sample_comm_ive.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common/sample_comm_vo.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common/sample_comm_venc.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common/sample_comm_vi.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/sample/achcamapp/../common/sample_comm_vda.o /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/libmpi.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/libtde.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/libVoiceEngine.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/libupvqe.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/libdnvqe.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/libisp.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/libsns_mn34220.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/lib_cmoscfg.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/lib_iniparser.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/lib_hiae.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/lib_hiawb.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/lib_hiaf.a /home/ach/Hi3516A_SDK_V2.0.7.0/mpp/lib/lib_hidefog.a /opt/sdl_lib/lib/libfreetype.a /opt/sdl_lib/lib/libSDL.a /opt/sdl_lib/lib/libSDL_ttf.a /opt/sdl_lib/lib/libfreetype.so /opt/sdl_lib/lib/libSDL.so /opt/sdl_lib/lib/libSDL_ttf.so

如有其他問題可以私信本人

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章