Cmake常用指令介紹

最近在用FFmpeg做視頻播放的時(shí)候,在使用ANativeWindow *nativeWindow = ANativeWindow_fromSurface(env, surface);總是報(bào)error: undefined reference to 'ANativeWindow_fromSurface'渠牲,對(duì)應(yīng)的頭文件都引入了∮仍螅可是還是報(bào)未定義。然后經(jīng)過(guò)查找原來(lái)是Cmake配置出錯(cuò)了规脸。這里對(duì)NDK開(kāi)發(fā)中Cmake常用的指令做介紹坯约,其詳細(xì)介紹請(qǐng)查看:Android NDK 開(kāi)發(fā):CMake 使用

cmake_minimum_required(VERSION 3.4.1)

include_directories(${JNI_LIBS_DIR}/includes)

find_library(log-lib log)

add_library(native-lib
            SHARED
            src/main/cpp/native-lib.c )

set(JNI_LIBS_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs)

add_library(avutil
            SHARED
            IMPORTED )
set_target_properties(avutil
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavutil.so )

add_library(swresample
            SHARED
            IMPORTED )
set_target_properties(swresample
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libswresample.so )

add_library(avresample
            SHARED
            IMPORTED )
set_target_properties(avresample
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavresample.so )

add_library(swscale
            SHARED
            IMPORTED )
set_target_properties(swscale
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libswscale.so )

add_library(avcodec
            SHARED
            IMPORTED )
set_target_properties(avcodec
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavcodec.so )

add_library(avformat
            SHARED
            IMPORTED )
set_target_properties(avformat
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavformat.so )

add_library( avfilter
             SHARED
             IMPORTED )
set_target_properties(avfilter
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavfilter.so )

add_library(avdevice
            SHARED
            IMPORTED )
set_target_properties(avdevice
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavdevice.so )
target_link_libraries(native-lib
                      avutil swresample avresample swscale avcodec avformat avfilter avdevice android
                      ${log-lib} )

上述文件是做FFmpeg開(kāi)發(fā)時(shí),Cmake的配置文件

1.cmake_minimum_required(VERSION 3.4.1)

設(shè)置編譯 native library 需要最小的 cmake 版本,不設(shè)置的話會(huì)報(bào)錯(cuò)莫鸭。

2.include_directories(${JNI_LIBS_DIR}/includes)

用來(lái)向工程添加多個(gè)特定的頭文件搜索路徑

3.find_library(log-lib log)

找?guī)?/p>

4.set(JNI_LIBS_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs)

定義變量闹丐,用JNI_LIBS_DIR來(lái)代替后面的路徑

5.將本地源文件編譯成指定的so庫(kù)

#將native-lib.c 編譯成 libnative-lib.so庫(kù)
add_library(native-lib
            SHARED
            src/main/cpp/native-lib.c )

6.引入第三方so庫(kù)

#引入第三方 liavutil.so庫(kù),倒入后需要使用 target_link_libraries 鏈接該庫(kù),才可以直接使用該庫(kù)
add_library(avutil
            SHARED
            IMPORTED )
#指定要倒入庫(kù)的路徑被因,add_library卿拴,在執(zhí)行該指令  衫仑,最后鏈接才能使用
set_target_properties(avutil
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavutil.so )

7.鏈接動(dòng)態(tài)庫(kù)

#添加鏈接庫(kù)(我們使用的三方庫(kù))
target_link_libraries(native-lib
                      avutil swresample avresample swscale avcodec avformat avfilter avdevice android
                      ${log-lib} )

文章開(kāi)頭說(shuō)的那個(gè)錯(cuò)誤,是因?yàn)闆](méi)有鏈接android這個(gè)庫(kù)堕花,所以才會(huì)報(bào)錯(cuò)的文狱。

總結(jié)

通過(guò)add_library來(lái)指定要引入的庫(kù) ,通過(guò) set_target_properties 來(lái)指定該庫(kù)的路徑缘挽,最后通過(guò)target_link_libraries來(lái)鏈接我們引入的庫(kù)瞄崇,只有這樣我們才能使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壕曼,一起剝皮案震驚了整個(gè)濱河市苏研,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窝稿,老刑警劉巖楣富,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凿掂,死亡現(xiàn)場(chǎng)離奇詭異伴榔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)庄萎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門踪少,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人糠涛,你說(shuō)我怎么就攤上這事援奢。” “怎么了忍捡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵集漾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我砸脊,道長(zhǎng)具篇,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任凌埂,我火速辦了婚禮驱显,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞳抓。我一直安慰自己埃疫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布孩哑。 她就那樣靜靜地躺著栓霜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪横蜒。 梳的紋絲不亂的頭發(fā)上胳蛮,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天秤掌,我揣著相機(jī)與錄音,去河邊找鬼鹰霍。 笑死闻鉴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茂洒。 我是一名探鬼主播孟岛,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼督勺!你這毒婦竟也來(lái)了渠羞?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤智哀,失蹤者是張志新(化名)和其女友劉穎次询,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瓷叫,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屯吊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了摹菠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盒卸。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖次氨,靈堂內(nèi)的尸體忽然破棺而出蔽介,到底是詐尸還是另有隱情,我是刑警寧澤煮寡,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布虹蓄,位于F島的核電站,受9級(jí)特大地震影響幸撕,放射性物質(zhì)發(fā)生泄漏薇组。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一杈帐、第九天 我趴在偏房一處隱蔽的房頂上張望体箕。 院中可真熱鬧,春花似錦挑童、人聲如沸累铅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)娃兽。三九已至,卻和暖如春尽楔,著一層夾襖步出監(jiān)牢的瞬間投储,已是汗流浹背第练。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玛荞,地道東北人娇掏。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像勋眯,于是被迫代替她去往敵國(guó)和親婴梧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容