當前位置:首頁 » 編程軟體 » ninja編譯android

ninja編譯android

發布時間: 2022-06-19 15:23:57

㈠ ninja工具在android上如何編譯出來的

1.准備工作: (ubuntu1110 32位) ubuntu等linuxOS,下載好eclipse,安裝好JDK, 安裝好android的SDK, 在eclipse中成功打開android 手機模擬器即OK。 2.初始化編譯環境 : 關注該網頁上的「installing required packages」,其中有的軟體包因為版...

㈡ android 6.0的源碼編譯問題

看報錯信息是找不到這個文件build/kati/Makefile.ckati。可能沒有下載完全?
可以對比下別人的代碼看有沒有,或者可以問一些朋友要這個文件,實在沒有。在ninjia.mk中把這行注釋掉在編譯試試。先make clean

㈢ 在編譯項目的時候出現這樣的錯誤

純虛函數在派生類中如果沒有實現,仍是純虛函數,如果包含類中有純虛函數,那麼類自動成為抽象類,無法實例化,你看看Circle類有沒有實現所有的純虛函數。

㈣ 如何編譯Chrome for Android

下載 depot_tools
下載 depot_tools(默認下載到當前用戶主文件夾下的 chromium 子目錄,自行根據需要修改,下載完畢後需要將 depot_tools 的目錄添加到 PATH)
cd ~ mkdir chromium cd chromium git clone chromium.googlesource.com/chromium/tools/depot_tools.git
下載源代碼和編譯所需的第三方工具/庫
fetch --nohooks android --nosvn=True cd src git checkout master # if you are building for Android: ./build/install-build-deps-android.sh gclient sync --nohooks
配置 GYP
~/chromium$ echo "{ 'GYP_DEFINES': 'OS=android', }" > chromium.gyp_env ~/chromium$ gclient runhooks
安裝 java JDK(如果已經安裝可以跳過)
# 安裝 Open JDK 1.7 ~/chromium$ sudo apt-get install openjdk-7-jdk # 配置為默認 JDK sudo update-alternatives --config javac sudo update-alternatives --config java sudo update-alternatives --config javaws sudo update-alternatives --config javap sudo update-alternatives --config jar sudo update-alternatives --config jarsigner
編譯 Content shell
# 編譯 Release 版本並安裝到手機上 ~/chromium/src$ ninja -C out/Release content_shell_apk ~/chromium/src$ build/android/adb_install_apk.py --apk ContentShell.apk --release # 編譯 Debug 版本並安裝到手機上,Debug 版本可用於調試 ~/chromium/src$ ninja -C out/Debug content_shell_apk ~/chromium/src$ build/android/adb_install_apk.py --apk ContentShell.apk --debug

㈤ android源碼編譯錯誤,求指點: out/target/proct/generic/obj/lib/libcamera.so', needed by

在生成libcamera.so庫文件的Android.mk中即~/device/sumsumg/libcamera中,去掉其中的ifneq和ifeq條件即可編譯生成libcamera.so

㈥ 有誰最近編譯成功過 webrtc for android 的代碼

1). 准備環境
1. Ubuntu 14.04 LTS 系統
2. 准備一個穩定的速度還可以的VPN 或者 VPS ,這個很重要,大家都懂,大部分下載代碼失敗都是因為訪問google服務失敗導致的.(本人用的Digital Ocean, 之前試過幾個VPN都以失敗而告終,蛋都碎了,要麼是不穩定,要麼速度非常慢,最長一次用了15個小時都沒有下載成功)
3. 安裝下載$編譯webrtc代碼所需工具
a. jdk (本人用的 sun jdk1.6.0_45)
配置到環境變數中

b. git ( 版本 1.9.1 )
安裝: sudo apt-get install git
c. gclient
1.安裝:
2.配置到環境變數中 ,至於怎麼配置,不知道的google一下
d. 安裝如下工具 ( sudo apt-get install ..)
g++ (>= 4.2)
python (>= 2.4)
libnss3-dev >= 3.12
libasound2-dev
libpulse-dev
libjpeg62-dev
libxv-dev
libgtk2.0-dev
libexpat1-dev
For 32-bit builds on a 64-bit system:
lib32asound2-dev
ia32-libs
2). 下載代碼
1.同步WebRTC代碼
1.創建WebRTC目錄
mkdir WebRTC
cd WebRTC
2.初始化gclient
3. 設計目標系統版本的配置

echo "target_os = ['Android', 'unix']" >> .gclient
4. sync代碼
gclient sync --nohooks
( 煎熬的一步,我同步下來的代碼有7.1G之大,裡麵包括NDK、SDK等其他tools 之前用VPN都敗在這里,後來用VPS,只用了6分多鍾,哎,說點什麼呢......尼瑪,國內程序員就是苦逼)
注意,若長時間出現 Still working on等信息,請不要中斷或者關閉,它依然在運行,如果你這里中斷了,那麼之前下載的東西會全部刪除,然後又得重新sync一遍
3). 編譯代碼
1.設置編譯環境
1. cd trunk
2. source ./build/android/envsetup.sh
3.export GYP_DEFINES="$GYP_DEFINES OS=android"
2. 下載編譯所依賴的包或工具,(這里又會下載一大堆東西 如 Ant.)
./build/install-build-deps.sh (trunk目錄下)
3. gclient runhooks --force (下載編譯所需的build文件等信息)
4. 編譯 ( trunk目錄下 )
編譯Debug版: ninja -C out/Debug
編譯Release版: ninja -C out/Release
基於以上步驟,如果網路能正常訪問google服務的話,一般都不會出現其他的問題,如果真碰到了問題,不要怕,一般根據錯誤信息就可以知道相應的原因。不知道的google一下
編譯成功之後 在 out/Debug 或者 out/Release目錄下看到相應的demo安裝包 如Debug目錄下,其中就有 AppRTCDemo-debug.apk 和 WebRTCDemo-debug.apk
AppRTCDemo程序的代碼就再 trunk/talk/examples/android/ 目錄下

㈦ 如何使用ninja快速編譯LLVM和Clang

1,Build llvm/clang/lldb/lld 3.5.0等組件

1.0 准備:

至少需要從llvm.org下載llvm, cfe, lldb, compiler-rt,lld等3.5.0版本的代碼。

$tar xf llvm-3.5.0.src.tar.gz

$cd llvm-3.5.0.src

$mkdir -p tools/clang
$mkdir -p tools/clang/tools/extra
$mkdir -p tools/lld
$mkdir -p projects/compiler-rt

$tar xf cfe-3.5.0.src.tar.xz -C tools/clang --strip-components=1
$tar xf compiler-rt-3.5.0.src.tar.xz -C projects/compiler-rt --strip-components=1
$tar xf lldb-3.5.0.src.tar.xz -C tools/clang/tools/extra --strip-components=1
$tar xf lld-3.5.0.src.tar.xz -C tools/lld --strip-components=1
1.1 【可選】使用clang --stdlib=libc++時,自動添加-lc++abi。

libc++組件可以使用gcc libstdc++的supc++ ABI,也可以使用c++abi,cxxrt等,實際上自動添加-lc++abi是不必要的,這里這么處理,主要是為了方便起見。實際上完全可以在「clang++ -stdlib=libc++」時再手工添加-lc++abi給鏈接器。

這里涉及到鏈接時DSO隱式還是顯式的問題,早些時候ld在鏈接庫時會自動引入由庫引入的依賴動態庫,後來因為這個行為的不可控性,所以ld鏈接器的行為做了修改,需要顯式的寫明所有需要鏈接的動態庫,才會有手工添加-lc++abi這種情況出現。

--- llvm-3.0.src/tools/clang/lib/Driver/ToolChain.cpp 2012-03-26 18:49:06.663029075 +0800
+++ llvm-3.0.srcn/tools/clang/lib/Driver/ToolChain.cpp 2012-03-26 19:36:04.260071355 +0800
@@ -251,6 +251,7 @@
switch (Type) {
case ToolChain::CST_Libcxx:
CmdArgs.push_back("-lc++");
+ CmdArgs.push_back("-lc++abi");
break;

case ToolChain::CST_Libstdcxx:
1.2 【必要】給clang++添加-fnolibgcc開關。

這個開關主要用來控制是否連接到libgcc或者libunwind。

註:libgcc不等於libunwind。libgcc_eh以及supc++的一部分跟libunwind功能相當。

註:libgcc_s和compiler_rt的一部分相當。

這個補丁是必要的, 不會對clang的正常使用造成任何影響 ,只有在使用「-fnolibgcc"參數時才會起作用。

之所以進行了很多unwind的引入,主要是為了避免不必要的符號缺失麻煩,這里的處理相對來說是干凈的,通過as-needed規避了不必要的引入。

--- llvm-static-3.5.0.bak/tools/clang/lib/Driver/Tools.cpp 2014-09-10 13:46:02.581543888 +0800
+++ llvm-static-3.5.0/tools/clang/lib/Driver/Tools.cpp 2014-09-10 16:03:37.559019321 +0800
@@ -2060,9 +2060,15 @@
".a");

CmdArgs.push_back(Args.MakeArgString(LibClangRT));
- CmdArgs.push_back("-lgcc_s");
- if (TC.getDriver().CCCIsCXX())
- CmdArgs.push_back("-lgcc_eh");
+ if (Args.hasArg(options::OPT_fnolibgcc)) {
+ CmdArgs.push_back("--as-needed");
+ CmdArgs.push_back("-lunwind");
+ CmdArgs.push_back("--no-as-needed");
+ } else {
+ CmdArgs.push_back("-lgcc_s");
+ if (TC.getDriver().CCCIsCXX())
+ CmdArgs.push_back("-lgcc_eh");
+ }
}

static void addProfileRT(
@@ -7150,24 +7156,50 @@
bool isAndroid = Triple.getEnvironment() == llvm::Triple::Android;
bool StaticLibgcc = Args.hasArg(options::OPT_static_libgcc) ||
Args.hasArg(options::OPT_static);
+
+
+
if (!D.CCCIsCXX())
- CmdArgs.push_back("-lgcc");
+ if (Args.hasArg(options::OPT_fnolibgcc)) {
+ CmdArgs.push_back("--as-needed");
+ CmdArgs.push_back("-lunwind");
+ CmdArgs.push_back("--no-as-needed");
+ } else
+ CmdArgs.push_back("-lgcc");

if (StaticLibgcc || isAndroid) {
if (D.CCCIsCXX())
- CmdArgs.push_back("-lgcc");
+ if (Args.hasArg(options::OPT_fnolibgcc)) {
+ CmdArgs.push_back("--as-needed");
+ CmdArgs.push_back("-lunwind");
+ CmdArgs.push_back("--no-as-needed");
+ } else
+ CmdArgs.push_back("-lgcc");
} else {
if (!D.CCCIsCXX())
CmdArgs.push_back("--as-needed");
- CmdArgs.push_back("-lgcc_s");
+ if (Args.hasArg(options::OPT_fnolibgcc))
+ CmdArgs.push_back("-lunwind");
+ else
+ CmdArgs.push_back("-lgcc_s");
if (!D.CCCIsCXX())
CmdArgs.push_back("--no-as-needed");
}

if (StaticLibgcc && !isAndroid)
- CmdArgs.push_back("-lgcc_eh");
+ if (Args.hasArg(options::OPT_fnolibgcc)) {
+ CmdArgs.push_back("--as-needed");
+ CmdArgs.push_back("-lunwind");
+ CmdArgs.push_back("--no-as-needed");
+ } else
+ CmdArgs.push_back("-lgcc_eh");
else if (!Args.hasArg(options::OPT_shared) && D.CCCIsCXX())
- CmdArgs.push_back("-lgcc");
+ if (Args.hasArg(options::OPT_fnolibgcc)) {
+ CmdArgs.push_back("--as-needed");
+ CmdArgs.push_back("-lunwind");
+ CmdArgs.push_back("--no-as-needed");
+ } else
+ CmdArgs.push_back("-lgcc");

// According to Android ABI, we have to link with libdl if we are
// linking with non-static libgcc.
--- llvm-static-3.5.0.bak/tools/clang/include/clang/Driver/Options.td 2014-08-07 12:51:51.000000000 +0800
+++ llvm-static-3.5.0/tools/clang/include/clang/Driver/Options.td 2014-09-10 13:36:34.598511176 +0800
@@ -788,6 +788,7 @@
def fomit_frame_pointer : Flag<["-"], "fomit-frame-pointer">, Group<f_Group>;
def fopenmp : Flag<["-"], "fopenmp">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>;
def fopenmp_EQ : Joined<["-"], "fopenmp=">, Group<f_Group>, Flags<[CC1Option]>;
+def fnolibgcc : Flag<["-"], "fnolibgcc">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>;
def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group<f_Group>;
def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group<f_Group>;
def force__cpusubtype__ALL : Flag<["-"], "force_cpusubtype_ALL">;
1.3 llvm的其他補丁。

llvm/clang將gcc toolchain的路徑hard code在代碼中,請查閱tools/clang/lib/Driver/ToolChains.cpp。

找到x86_64-redhat-linux之類的字元串。

如果沒有你系統特有的gcc tripple string,請自行添加。

這個tripple string主要是給llvm/clang搜索gcc頭文件等使用的,不影響本文要構建的toolchain

1.4 構建clang/llvm/lldb

本文使用ninja。順便說一下,llvm支持configure和cmake兩種構建方式。可能是因為工程太大,這兩種構建方式的工程文件都有各種缺陷(主要表現在開關選項上,比如configure有,但是cmake卻沒有等)。llvm-3.4.1就是因為cmake工程文件的錯誤而導致了3.4.2版本的發布。

綜合而言,cmake+ninja的方式是目前最快的構建方式之一,可以將構建時間縮短一半以上。

mkdir build
cd build

cmake \
-G Ninja \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_CXX_FLAGS="-std=c++11" \
-DBUILD_SHARED_LIBS=OFF \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_TARGETS_TO_BUILD="all" \
-DCLANG_VENDOR="MyOS" ..

ninja

ninja install
如果系統原來就有clang/clang++的可用版本,可以添加:

-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
這樣就會使用系統的clang++來構建llvm/clang

2,測試clang/clang++。

自己找幾個簡單的c/cpp/objc等編譯測試一下即可。完整測試可以在構建時作ninja check-all

3,libunwind/libc++/libc++abi,一套不依賴libgcc, libstdc++的c++運行庫。

3.1 從https://github.com/pathscale/libunwind 獲取代碼。

libunwind有很多個實現,比如gnu的libunwind, path64的libunwind,還有libcxxabi自帶的Unwinder.

這里作下說明:

1),gnu的libunwind會有符號缺失和沖突。

2),libcxxabi自帶的Unwinder是給mac和ios用的,也就是只能在darwin體系構建。目前Linux的實現仍然不全,等linux實現完整了或許就不再需要path64的unwind實現了。

暫時建議使用pathscale的unwind實現。

mkdir -p build
cd build
cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_C_FLAGS="-m64" ..
ninja

mkdir -p /usr/lib
cp src/libunwind.so /usr/lib
cp src/libunwind.a /usr/lib
3.2 第一次構建libcxx.

必須先構建一次libcxx,以便後面構建libcxxabi。這里構建的libcxx實際上是使用gcc的libgcc/stdc++/supc++的。

打上這個補丁來禁止libgcc的引入:

diff -Nur libcxx/cmake/config-ix.cmake libcxxn/cmake/config-ix.cmake
--- libcxx/cmake/config-ix.cmake 2014-06-25 06:57:50.000000000 +0800
+++ libcxxn/cmake/config-ix.cmake 2014-06-25 09:05:24.980350544 +0800
@@ -28,5 +28,4 @@
check_library_exists(c printf "" LIBCXX_HAS_C_LIB)
check_library_exists(m ccos "" LIBCXX_HAS_M_LIB)
check_library_exists(rt clock_gettime "" LIBCXX_HAS_RT_LIB)
-check_library_exists(gcc_s __gcc_personality_v0 "" LIBCXX_HAS_GCC_S_LIB)
編譯安裝:

mkdir build
cd build
cmake \
-G Ninja \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
..
ninja
ninja install
3.3,測試第一次構建的libcxx。

使用"clang++ -stdlib=libc++ -o test test.cpp -lstdc++"編譯簡單c++代碼,檢查是否出錯。(如果前面構建clang是已經apply了c++abi的鏈接補丁,這里會出現找不到c++abi的情況,跳過即可)

使用"ldd test"查看test二進制動態庫使用情況。可以發現,test依賴於libgcc_s/libc++/libstdc++。(多少有些不爽了吧?使用了libc++居然還要依賴libstdc++?)

㈧ Android編譯時候無法啟動jack伺服器

要知道為什麼Android界面無法正常啟動,可以在串口命令行上先執行"stop"命令,再執行"start"命令,然後
1. 如果可以通過USB連接ADB的話,用adb logcat把Android的啟動信息列印出來;
2. 如果ADB無法連接,在串口命令行上用logcat命令

㈨ android 7.0 launcher3 編譯報錯:

編譯過程中報錯提示如下:
make: *** No rule to make target `out/target/common/obj/JAVA_LIBRARIES/libprotobuf-Java-2.3.0-nano_intermediates/javalib.jar', needed by `out/target/common/obj/APPS/Launcher3_intermediates/classes-full-debug.jar'. Stop.

原生的SDK居然報錯,沒辦法只能著手分析了。從字面分析來看是編譯需要的protobuf jar包沒有build進去導致的,先看看是哪個相關的包。
host-libprotobuf-java-2.3.0-nano.jar這個jar包沒編譯出來,看了下源碼的mk文件,是有相關的編譯配置的,於是想想是不是有編譯依賴包相關的指令,
網上一找,還真有mma,於是mma一敲,嘩啦啦的過了。
網上有很多介紹的文章是在eclips中導入應用進行編譯的,此處就不作分析了。回頭有空研究下這些個編譯指令。。。

㈩ 怎麼編譯Chrome for Android

下載 depot_tools
下載 depot_tools(默認下載到當前用戶主文件夾下的 chromium 子目錄,自行根據需要修改,下載完畢後需要將 depot_tools 的目錄添加到 PATH)
cd ~ mkdir chromium cd chromium git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
下載源代碼和編譯所需的第三方工具/庫
fetch --nohooks android --nosvn=True cd src git checkout master # if you are building for Android: ./build/install-build-deps-android.sh gclient sync --nohooks
配置 GYP
~/chromium$ echo "{ 'GYP_DEFINES': 'OS=android', }" > chromium.gyp_env ~/chromium$ gclient runhooks
安裝 Java JDK(如果已經安裝可以跳過)
# 安裝 Open JDK 1.7 ~/chromium$ sudo apt-get install openjdk-7-jdk # 配置為默認 JDK sudo update-alternatives --config javac sudo update-alternatives --config java sudo update-alternatives --config javaws sudo update-alternatives --config javap sudo update-alternatives --config jar sudo update-alternatives --config jarsigner
編譯 Content shell
# 編譯 Release 版本並安裝到手機上 ~/chromium/src$ ninja -C out/Release content_shell_apk ~/chromium/src$ build/android/adb_install_apk.py --apk ContentShell.apk --release # 編譯 Debug 版本並安裝到手機上,Debug 版本可用於調試 ~/chromium/src$ ninja -C out/Debug content_shell_apk ~/chromium/src$ build/android/adb_install_apk.py --apk ContentShell.apk --debug

熱點內容
什麼配置就能玩地平線 發布:2025-05-16 09:13:46 瀏覽:82
python旋轉圖片 發布:2025-05-16 09:13:40 瀏覽:637
少女前線防檢測腳本 發布:2025-05-16 08:59:07 瀏覽:728
編譯器對系統的依賴 發布:2025-05-16 08:37:29 瀏覽:711
javamap數組 發布:2025-05-16 08:37:28 瀏覽:451
移動光貓如何自行修改密碼 發布:2025-05-16 08:20:15 瀏覽:125
作為基線存儲 發布:2025-05-16 08:15:22 瀏覽:859
安卓怎麼關閉手機應用推薦 發布:2025-05-16 08:03:38 瀏覽:930
sql內置函數 發布:2025-05-16 08:03:34 瀏覽:923
怎麼看伺服器內存型號 發布:2025-05-16 08:03:30 瀏覽:813