osapp分離編譯
❶ [openharmony]liteos-a編譯過程分析
最近搞一個sensor接入openharmony的事情,在分析源碼中的加速度計驅動相關源碼時,發現不緊有BUILD.gn文件,還有Makefile文件,並且裡面都有記錄源文件路徑。所以很困惑,openharmony是通過gn+ninja編譯的還是通過make編譯的?
為了搞清楚,所以針對liteos-a系統下的編譯過程進行分析,在這里記錄一下
通過官方文檔看,liteos-a系統編譯時用的是官方的hb命令 hb set 和 hb build 命令,所以入口肯定是hb工具
查看openharmony源碼中build目錄下有一個lite/hb目錄(hb命令的源碼目錄,使用python腳本)
看鴻蒙研究站裡面有一篇介紹hb命令的調試方法,通過vscode+python插件調試,參見 《v59.xx 鴻蒙內核源碼分析(構建工具篇) | 順瓜摸藤調試鴻蒙構建過程》
設置好之後就可以開始在vscode上調試
這個是整個編譯的重點,通過調試可以看到最終是調用了gn/ninja/fs_make,如下分析
這個就是整體的編譯過程了,先調用gn生成ninja文件,再通過ninja進行編譯,最後通過fs_make製作鏡像
因為內容太多,下面對這三個編譯動作先做個整體的介紹,後續再對每一個進行詳細分析
繼續調試,會先進入 gn_build 介面,看實現就是調用了 gn gen 命令,如下
查看gn_cmd變數,詳細命令為(比較多,經過了整理):
這個命令之後,就會將工程中所有用到的 BUILD.gn 文件轉換成 <mole_name>.ninja 文件(類似 makefile )供後面 ninja 命令(類似 make )調用並進行編譯
再繼續調試就會進入 ninja_build 介面,實現以及執行的詳細的 ninja 命令如下
這個命令與 make 命令類似,但是注重速度(詳細信息可以在網上搜索兩者區別);此命令執行即是通過build.ninja/toolchain.ninja/各BUILD.gn轉換的.ninja來進行編譯,並生成.bin/.so/.a等文件
整個編譯OK之後會輸出如下圖中成功信息
在out目錄下就會生成燒錄用到的鏡像文件,如下圖
❷ 如何在MacOSX Lion上編譯VLC media player
11.03
在Mac OS X Lion下編譯VLC media player
Prerequisite
Mac OS X Lion
XCode 4.4.1
0.建立一個文件夾並進入
$ mkdir vlc_osx && cd vlc_osx
1.設置編譯器
$ export CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
$ export CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
$ export OBJC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
2. 下載源碼至本地
$ git clone git://git.videolan.org/vlc.git
3. 編譯autoconfig等工具
$ cd vlc/extras/tools
$ ./bootstrap && make
$ cd ../..
$ export PATH=$PWD/extras/tools/build/bin:$PATH
(注意第四項設置非常重要,確保自行編譯生成的工具所在的路徑在系統原有路徑之前,否則會調用
系統原有的lib tool工具,由於版本問題,可以會導致下面的步驟出錯)
4. 設置操作系統版本
$ export OSX_VERSION=10.7
5. 編譯
$ cd contrib
$ mkdir -p osx && cd osx
$ ../bootstrap --host=x86_64-apple-darwin11 --build=x86_64-apple-darwin11
6.編譯第三方庫
6.1 下載編譯好的第三方庫(推薦)
$ make prebuilt
6.2 從源碼自行編譯第三方庫(反正我是沒有編譯成功)
$ make -j4 .gettext
$ export PATH=$PWD/../x86_64-apple-darwin11/bin:$PATH
7.Bootstrap VLC
$ cd ../..
$ ./bootstrap
8.配置編譯選項(Configure)
$ mkdir -p build && cd build
$ ../extras/package/macosx/configure.sh --enable-debug --disable-ncurses --host=x86_64-apple-darwin11 --build=x86_64-apple-darwin11
9.編譯VLC
$ make -j4 或 $./compile.sh
10.開始使用
此時在當前目錄下(即build目錄)下應有一個VLC.app目錄
$VLC.app/Contents/MacOS/VLC
應該可以看到vlc media player正確啟動了
Reference
http://wiki.videolan.org/OSXCompile
❸ 安卓app主要用什麼編程語言的
安卓App用Java和Kotlin作為開發語言。
Google IO 2017宣布了 Kotlin 會成為 Android 官方開發語言。在Kotlin 語言出現之前,幾乎所有的安卓應用程序都是使用Java語言編寫的。
(3)osapp分離編譯擴展閱讀
Google在今年I/O2017開發者大會中宣布,正式把Kotlin納入Android程序的一級開發語言(First-classlanguage),並與開發團隊JetBrains合組非牟利基金會推廣Kotlin。據多間外國媒體報導,這是GoogleI/O開發者大會中引來最多歡呼聲的消息。
Kotlin將於AndroidStudio3.0得到支持,JetBrians指開發者不用再安裝額外元件或擔心兼容問題。Kotlin能與Java互通,但擁有Java不支持的功能。Google相信利用Kotlin可使Android程序開發更快捷有趣,但他們補充,此舉絕非取代Java和C++的官方支持。
❹ UCOSII系統編譯時,老出現app.obj : error LNK2001: unresolved external symbol _OSFlagQuery
unresolved external symbol
造成這個錯誤的原因,是鏈接找不到函數的實體或實體歧義。造成錯誤的可能原因很多,如果你確定有函數實體並且app已經包含了頭文件,那麼要麼是包含順序、包含關系錯誤,要麼是定義歧義(找到多個可能的定義)。
檢查APP這個源文件的包含頭文件順序,以及各個頭文件中加入的嵌套包含。檢查是否有多個函數實體。檢查是否存在重復包含現象。