CMake 構(gòu)建動態(tài)庫沒有生成so文件

原文鏈接

最近開始學(xué) NDK 編程,踩了不少的坑。

在 Android Studio 中生成 so 文件又兩種方式,一種使用 ndk-build,一種使用 CMake。

使用 ndk-build 可以在 Android.mk 和 Application.mk 文件中,設(shè)置編譯屬性和依賴等。
每一次編譯項目都需要手動執(zhí)行 ndk-build 命令才能生成 so 文件,如果經(jīng)常修改 C 代碼,每次都要重新執(zhí)行命令,很麻煩。
也可以在 Gradle 中增加 ndk 配置,但是這種方式有缺陷。Android Studio 創(chuàng)建項目時推薦使用第二種方式:使用 CMake。

CMake 是一個跨平臺的自動化建構(gòu)系統(tǒng),使用 CMakeLists.txt 來描述構(gòu)建過程。可以產(chǎn)生標(biāo)準的構(gòu)建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces。

于是乎開始了 CMake 的踩坑之旅。找了一本 CMake 實踐 PDF 開始學(xué)習(xí)。

在構(gòu)建動態(tài)庫時生成不了 so 文件。檢查了好幾遍,代碼和配置跟 PDF 中的一模一樣。輸出如下:

MacBook-Pro:build binwin20$ make
Scanning dependencies of target lib
[ 50%] Building C object lib/CMakeFiles/lib.dir/hello.c.o
[100%] Linking C shared library liblib.dylib
[100%] Built target lib

看到 liblib.dylib 文件,挺奇怪的,為啥不是 so 文件呢?然后 在 Sublime 的側(cè)邊欄中找了一下沒找到 liblib.dylib 文件,猜想這可能是個中間文件。
網(wǎng)上各種搜就是找不到答案。最后猜想可能是 Mac 編譯的不是 so 文件。于是乎啟動 Docker 打開 Ubuntu 系統(tǒng),把項目文件夾直接掛載到 Ubuntu 中,真是方便。下載 CMake 花了不少時間。
執(zhí)行 make 命令之后,輸出如下:

root@3eb73a8c9dcc:/myDocker/cmake/t3/build# make
Scanning dependencies of target lib
[ 50%] Building C object lib/CMakeFiles/lib.dir/hello.c.o
[100%] Linking C shared library liblib.so
[100%] Built target lib

發(fā)現(xiàn) Ubuntu 中有生成 so 文件,在 Sublime 的側(cè)邊欄中 還是沒看到 so 文件,坑啊。又繼續(xù)找了好久,沒找到原因,然后猜想,會不會生成到其他地方了呢?于是執(zhí)行了一下 find,

root@3eb73a8c9dcc:/myDocker/cmake/t3/build# find      
.
./cmake_install.cmake
./CMakeCache.txt
...
./lib/CMakeFiles/progress.marks
./lib/liblib.so
./lib/Makefile
./Makefile

看到了 liblib.so。這人品,簡直要爆了,要不是項目名 lib 字母排在 CMakeFiles 后面,指不定還要找多久才能找到這個文件呢。

然后看看 Sublime 的側(cè)邊欄 還是沒有 so 文件,一臉蒙蔽。難道 Docker 中的文件都還在虛擬機內(nèi)存中,Mac中看不到?然后在 Mac 中終端里看了一下,有這個文件啊。。。

最后在 Sublime 中 command + ,,果然找到了原因。要是早點讓我看到 liblib.dylib,也不至于被坑這么久啊。

{
    "folder_exclude_patterns": [".svn", ".git", ".hg", "CVS"],
    "file_exclude_patterns": ["*.pyc", "*.pyo", "*.exe", "*.dll", "*.obj","*.o", "*.a", "*.lib", "*.so", "*.dylib", "*.ncb", "*.sdf", "*.suo", "*.pdb", "*.idb", ".DS_Store", "*.class", "*.psd", "*.db", "*.sublime-workspace"]
}

有時間一定要把《程序員的自我修養(yǎng)》看一遍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容