前一篇筆記里遇到的神奇問題用了一個更神奇的辦法竟然被解決了...頭疼了這么久的問題果然是因為沒找到本質(zhì)。
1 問題解決
之前提到的總是無法找到 iconv() 函數(shù),試遍各種方法還是毫無頭緒姓赤。更絕情的是在其他地方編譯VLC都是順利通過檢查的另萤,連which和pkg-config都能找到iconv浑槽,唯獨(dú)configure找不到兢哭。
最后解決的辦法是直接替換掉了整個iconv的項目目錄领舰,然后調(diào)整到正確的版本重新編譯。
反思了一下大概是被error蒙蔽了雙眼...
VLC-Android 項目中用到的插件并不是外部安裝的迟螺,而是在/vlc/contrib/android目錄下根據(jù)插件需要提揍,下載資源至tarballs然后交由插件自己的腳本進(jìn)行安裝,并統(tǒng)一指定了PREFIX路徑煮仇。
所以error指向的并不是我安裝的iconv的問題,甚至PKG_CONFIG_PATH都沒有指向/usr下的任何目錄...
以armv7為例谎仲,他的PKG_CONFIG_PATH只指向了~/vlc-android/vlc/contrib/arm-linux-androideabi浙垫,所以一直以來的掙扎有點(diǎn)偏了。
但前面也嘗試過通過更改PKG_CONFIG_PATH來修正這個問題郑诺,推測失敗的原因是最終指向的還是不完整的iconv目錄夹姥。
為什么說是不完整的呢...因為這次出錯的時候一直有一個被忽略的現(xiàn)象:執(zhí)行compile下載contrib依賴的時候經(jīng)常會因為各種原因中斷,顯示的是網(wǎng)速消失辙诞,本質(zhì)是git緩沖出錯辙售。
這種情況下筆者只能...也只會^C強(qiáng)停后重新運(yùn)行,造成的結(jié)果就是可能會出現(xiàn)不完整的依賴飞涂。
解決方法:修改~/.gitconfig文件旦部,在最下面加上:
[http]
?????postBuffer = 524288000
當(dāng)然問題出現(xiàn)的原因還有另一個沒有表現(xiàn)出來的:vlc版本問題。
VLC-Android 中使用的vlc版本為3.0较店,我們在之前替換的時候使用了4.0的版本士八,造成了很多隱含的依賴問題,全部版本歸為后問題終于順利解決梁呈。
2 其他問題
解決了最大的攔路虎后陸陸續(xù)續(xù)也遇到了很多其他的問題婚度,挑了幾個記錄下來:
./loop_wchar.h:221: error: undefined reference to '__ctype_get_mb_cur_max'
clang50: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:78: recipe for target 'iconv_no_i18n' failed
make[2]: *** [iconv_no_i18n] Error 1
推測原因:NDK缺陷
解決辦法:一篇不錯的博客
../src/parser/Task.h:30:10: fatal error: 'vlcpp/vlc.hpp' file not found
#include <vlcpp/vlc.hpp>
推測原因:git pull 的時候該資源在別的分支下
解決辦法:將官方提供的文件下載并解壓,拷貝到vlc-android/medialibrary/medialibrary/libvlcpp里
/home/hwren/SRC/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldavs2
推測原因:前面說到的內(nèi)部依賴環(huán)境
解決辦法:在contrib/android下自己寫一個davs2的rule.mak腳本官卡,自動下載并編譯到指定PREFIX中
Please upload this package davs2-git.tar.gz to our FTP
Makefile:520: *** Download and check target not defined for davs2. Stop.
contribs: make fetch failed
推測原因:上一個問題中davs2沒有放在vlc的ftp上蝗茁,所以自己下了一個放在tarballs里了醋虏,缺少后續(xù)生成的 .davs2 和 .sum-davs2 文件。
解決辦法:在contrib/android下自己 touch 兩個
No working C compiler found.
make: *** [.davs2] Error 1
contribs: make failed
推測原因:用C++編譯的東西竟然報了C編譯器的錯...這個問題往往是文件或依賴缺失哮翘,或者參數(shù)問題颈嚼。
解決辦法:核對 ./configure 里加的一堆參數(shù),最終問題出現(xiàn)在交叉編譯配置上忍坷。
3 感想
這次的BUG是我初入計算機(jī)世界以來最困擾也是最毫無頭緒的一次粘舟,越往下挖越覺得自己還是看的太淺。當(dāng)然現(xiàn)在還是只摸到了Linux和音視頻的冰山一角佩研。用了大半個假期才堪堪完成了VLC的兩個平臺的小更改柑肴,還留著一大堆問題等著優(yōu)化。想象著師兄們快刀斬亂麻一樣的解決問題的樣子……果然呀旬薯,路還長著晰骑。
話說這次好歹的沒失去耐心,還算有進(jìn)步绊序,繼續(xù)加油硕舆。