當前位置:首頁 » 編程軟體 » gtk交叉編譯

gtk交叉編譯

發布時間: 2023-03-22 19:59:59

⑴ 如何在linux系統中移植科大訊飛的離線語音識別庫

你在交叉編譯時是如何配置的? ./configure --host=arm-none-linux-gnueabi --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --disable-shared --disable-apps CXX=arm-none-linux-gnueabi-g++ CPPFLAGS=-I/usr/arm-2008q3/arm-none-linux-gnueabi/include --prefix=/usr/opencv 其中:--without-gtk 不使用gtk庫,加上了嗎?

⑵ Maemo 5.0的SDK和工具

運行於桌面機的Maemo 開發環境被稱為maemo SDK。它只能被安裝和運行於Linux 操作系統。在諸如Windows 這樣的其它操作系統上,可以使用一個VMWare 鏡像以提供Linux 工作環境。Maemo SDK 在GNOME/Linux 桌面系統上創建一種沙箱模式的maemo 開發環境。原則雹乎配上,這種砂箱環境是建立在被稱為Scratchbox 的工具上。在多數情況下這種環境表現為終端上的操作系統,但增加了一些開源指發工具。這意味著:開發過程與普通桌面Linux 和GNOME/GTK+ 開發十分相似,而其頃搜獨特的嵌入式開發功能,如交叉編譯等,都是由Scratchbox 透明地處理的。

⑶ 如何使用eclipse進行嵌入式Linux的開發

1、安裝jdk

jdk(java development kit)即java開發包,其中包含了運行eclipse所需要的jre. ubuntu預設安裝的gnu版本的jre運行效率不高,所以需要安裝sun公司的jre. 首先從sun的網站上下載安裝包jdk-6u7-linux-i586.bin,然後如下進行安裝:

# mkdir -p /opt/java
# ./jdk-6u7-linux-i586.bin // 執行自解壓文件,生成目錄
# mv jdk1.6.0_07 /opt/java // 把目錄移到/opt/java下
# cd /opt/java
# ln -s jdk1.6.0_07 jdk
# mv /etc/alternatives/java /etc/alternatives/java.gnu
# ln -s /opt/java/jdk/bin/java /etc/alternatives/java
# export JAVA_HOME=/opt/java/jdk // 設置環境變數

2、安裝eclipse和cdt

從eclipse網站上下載安裝包eclipse-SDK-3.4-linux-gtk.tar.gz 和cdt-master-5.0.0.zip

# cd /opt
# tar zxvf eclipse-SDK-3.4-linux-gtk.tar.gz // 解壓生成eclipse目錄
# export PATH=/opt/eclipse:$PATH
# mkdir -p /opt/cdt
# cd /opt/cdt
# unzip cdt-master-5.0.0.zip
# cp -r plugins/* /opt/eclipse/plugins/
# cp -r features/* /opt/eclipse/features/

二、創建c/c++工程

假設已經在linux上安裝好了arm交叉工具鏈,下面介紹如何創建、交叉編譯和調試c/c++工程,進入eclipse安裝路徑後,運行eclipse。


創建c 工程

添加源代碼文件2

編輯代碼

設置工程屬性,指定交叉工具鏈1

設置工程屬性,指定交叉工具鏈2

設置工程屬性,指定交叉工具鏈3

編譯工程

已生成arm平台可執行代碼

配置調試選項

設置Debugger和 GDB debugger選項

設置連接類型為TCP,目標板的ip地址和調試埠號。埠號任意指定,通常大於1024(避免和系統所用埠號沖突)

在開發板上運行程序,格式如上圖所示:gdbserver是交叉調試輔助程序;192.168.0.150是主機的ip地址;1234是調試埠號,和eclipse調試選項里設定的埠號要一致

點擊Debug,進入調試界面

執行到斷點

eclipse的調試界面和操作和在windows下開發類似。

所需開發工具及環境

虛擬機Linux:Fedora 9

交叉編譯工具:arm-linux-gcc-3.4.1.tar.bz2

集成開發工具:Eclipse(Linux安裝包中自帶的,安裝Linux時選中安裝)

安裝ARM交叉編譯器

1. 安裝。其實很簡單,就是將下載的arm-linux-gcc-3.4.1.tar.bz2解壓到Linux根目錄即可(因為解壓後已經包含了/usr/local目錄,所以要解壓到根目錄),如下命令:


tar-jxvf arm-linux-gcc-3.4.1.tar.bz2-C/

解壓後的目錄/usr/local/arm/3.4.1/

2. 設置環境變數。就是把交叉編譯器的路徑設置到系統環境變數裡面去。


echo$PATH

查看現有的環境變數

如果只想臨時添加交叉編譯器的環境變數(註:臨時添加的系統重啟或注銷後又沒有了),只需在命令行輸入如下命令:


export PATH=$PATH:/usr/local/arm/3.4.1/bin

如果想這個環境變數永久的添加到系統的環境變數中,則你只需把這個命令添加到/root/.bashrc文件的最後一行即可(這個文件是隱藏文件,你要在文件瀏覽器中單擊查看菜單,勾選顯示隱藏文件才能看到)

3. 測試建立的交叉編譯環境。新建一個c程序,文件名:test.c, 如下:


#include<stdio.h>
intmain(void)
{
printf("Hellow world! ");
return0;
}

進行交叉編譯,如下:


arm-linux-gcc-o test test.c

將交叉編譯好的目標文件test下載到ARM開發板中並運行,如下:


./test

輸出結果為:

Hellow world!

用集成開發工具Eclipse來開發嵌入式應用程序

雙擊Eclipse圖標啟動Eclipse

設置Eclipse的工作空間,就是選個目錄,單擊OK

啟動後的主界面

開始新建一個應用程序工程

選擇新建一個C工程,單擊Next

給工程取個名字,這里我就叫test_app;然後選擇工程類型,我選擇了個Hellow world C工程模版,單擊Next

填寫作者、版權等信息,單擊Next

沒什麼選的,點擊Finish

單擊Yes

新建好的項目工程

展開左邊的源代碼目錄,雙擊打開主函數。這里只是輸出一句"Hello World!!!",你可以做一些其他復雜的應用

單擊Project菜單,去掉Build Automatically的勾選,因為勾選的話,每次修改一個地方工程都會自動進行編譯

打開工程的屬性對話框進行編譯選項的設置

我們的應用程序最終要到嵌入式arm上運行,這里就要把gcc改成arm-linux-gcc編譯器,當然前提是你要在你的開發主機上先安裝arm-linux-gcc

C連接器也要改成arm-linux-gcc

這里的Libraries是設置你的應用程序中用到的庫文件,比如應用程序中用到了線程類,則這里在上面添加pthread這個庫,下面就添加這個庫的路徑。如果應用程序沒用到任何庫文件就不用管了

選中左側的工程名,右鍵,在彈出的菜單中選擇Build Project編譯工程

編譯好後的工程,目標文件在Debug目錄下

⑷ 當程序不能編譯時怎麼辦調試configure

但是,這樣行不通時怎麼辦?在本文中,Peter Seebash 講述了當自動的配置腳本失效時應該如何去做——以及作為開發者您應如何盡量避免這種錯誤。畢竟,如果您的程序無法編譯,其結果將和您的程序編譯後不能運行一樣,您的用戶會減少。
現在許多開放源代碼的程序都會附帶有 configure 腳本。這種腳本的用途之一是自動進行對目標新系統的猜測過程。在過去,程序會附帶一個 Makefile 文件,這個文件中有 6 個不同的編譯標記和選項,但只會用到一個,其餘全部注釋掉,並且會有一個註解,告訴您「為您的系統選擇合適的標記」。如果配置選項更復雜,可能還會有一個名為 config.h 的長長的 C 頭文件,其中包含一些要設置的標記,這依賴於主機系統變數。
第一個方法很簡單,在代碼中使用 #ifdef 以支持兩種系統,例如 BSD 和 System V。由於 Unix 的類型的增加,更為實用的方法是對每一個特性使用 #ifdef。每個系統的代碼如下:清單 1. 每個系統的代碼#ifdef SUNOS4 || NEXT || NETBSD || FREEBSD || OPENBSD
#include <string.h
#else#include <strings.h
#endif每個特性的代碼如下:清單 2. 每個特性的代碼#ifdef HAS_STRING_H
#include <string.h
#else#include <strings.h
#endif後者更容易適應新系統,但需要開發者進行大量的工作。由於現在有太多可能的目標系統,因此,第二種方法對用戶來說幫助很大,不僅僅是可以自動生成配置頭文件。完成這項任務的一種方法是使用 GNU autoconf 代碼來生成 configure 腳本。這個腳本會去執行必要的測試,並創建一個具有適當值的配置頭文件。
這種腳本的另一個功能是以一致的方式設置預定義的變數。用手工編輯標記一直存在一個問題,即修改了 Makefile 文件(比如將其安裝到 /usr/gnu 而不是 /usr/local 目錄下)卻忘記修改頭文件中相應的值。當然,這樣的結果是,編譯後的程序不知道到哪裡去尋找它們自己的數據文件。使用 configure 腳本的一個好處是可以自動完成一致的安裝(如果維護者做得沒錯的話)。
開發人員請注意,一個好的 configure 腳本的另一個好處在於,它會允許用戶指定一些個人偏好,例如使用 /usr/gnu 而不是 /usr/local。
這些如何成為可能?編譯,再編譯configure 的許多功能實現機制其實很簡單。為了能切身體會,您可以設計一個小測試程序,這個程序當且僅當期望的條件得到滿足時才可以編譯。將它保存在一個臨時文件中,然後嘗試編譯它。例如,假定您想知道 X Windowing System 是否安裝在 /usr/X11R6 目錄下。一種方法是做一個如下的測試程序:#include <X11/X.h
int main(void) { return 0; }現在,如果您用編譯器來嘗試進行編譯,那麼只有當 <X11/X.h 在編譯器的 include 路徑中時,編譯才會成功。因此,對每一個您認為 X 可能安裝到的目錄,可以將對應的 (directory)/include 加入到編譯器的 include 路徑中,並嘗試對程序進行編譯。如果採用某個值時示例文件可以編譯,那麼您就得到了正確的 include 路徑。
請注意在 autoconf 中已經預定義了各種測試程序。如果可能,就直接使用這些測試程序,而不用自己去寫。這樣有很多好處。首先,autoconf 的新版本會改進這些測試程序,修正它們的錯誤,否則您將不得不自己去做這些工作。其次,這樣會節省您的時間。當然,更好的方法是完全避免測試。如果您確認某一個測試是沒有必要的(例如,即使機器位元組多於 8 位也仍需要使 sizeof(char) 為 1),您可以完全不去進行這個測試。
有一些測試是功能測試;它不足以確定是否存在一個名為 memcmp() 的函數,它的語義必須正確。通常,這些測試用於只是在一兩個平台上被注意到的非常不明顯的錯誤。這些測試實際上會去運行測試程序,並檢查它的輸出。測試程序遵循標準的 Unix 習慣:如果測試通過則返回值為 0,如果失敗則返回一個非 0 值。
一旦您有了足夠的測試程序,您可以用它們來自動確定必需的編譯標記和定義,以將它們放到頭文件的某個地方。通常,configure 腳本會允許用戶給出部分或全部已知的條件,而不是讓腳本自己去猜測。
來看一個特例,假定,系統的 brokenmemmove() 出現了問題。如果您不知道它現在有一個只會影響少部分程序的 bug,您可能會編譯一個程序並將其發布為產品,而沒有意識到這樣您將會遇到偶然的災難性錯誤。
在許多情況下,一個冗長而復雜的 configure 腳本的最終結果是這樣的:目標系統提供了這個程序用到的每一個標准特性,而且它們正確工作。在這種情況下為什麼不手工去設置這些標記呢?這對開發者來說是可行的,而對眾多用戶來說就不可以了。用戶可能不會知道到他們的 Linux 版本存在特定的 bug。他們可能不知道已經安裝了哪些軟體包,或者安裝到了何處。腳本幫那些最需要幫助的人來完成大部分的例行公事的工作。當腳本出錯時,引發的額外工作的代價可能不會太大。
錯在何處?既然您已經基本上了解了 configure 都做了些什麼工作,您可以開始尋找錯誤了。有兩種可能的 configure 錯誤。一種是 configure 是正確的,而您的系統缺少必要的先決條件。絕大多數情況下,configure 腳本會正確診斷出這種錯誤。更為麻煩的情況是 configure 本身的錯誤。這樣的結果或者是不能生成配置,或者生成一個不正確的配置。
當 configure 的猜測無誤,而您缺少先決條件時,您所要做就是要滿足缺少的那些先決條件。當您找到並安裝好後,再重新運行那個報告缺少先決條件的 configure 腳本,就可以成功了。(不要忘記刪除 config.cache 文件,這個文件緩存了上一次測試的結果;您應該讓 configure 從頭開始。)如果您正在開發 configure 腳本,您需要確保您給出的錯誤消息有意義。如果您測試的是一個函數,而這個函數是一個常見的可添加的軟體包的一部分,那麼不要告訴用戶缺少的函數的名稱 —— 告訴用戶他們需要的軟體包。確保將先決條件信息寫入 README 文件中。並且,請一定要告訴人們您測試使用的其他軟體包的版本號。
閱讀文檔無論何時,當 configure 失敗時您首先要做的是運行 configure -h,並檢查參數列表。如果它找不到您確認已經安裝的庫,您可能可以指定到另一個位置來找到這個庫。您還可以禁用和啟用某些特性。例如,用於 Angband (一個 Roguelike 游戲)的 configure 腳本有一個可選的標記 —— enable-gtk,以告訴腳本在編譯時啟用 GTK 支持。如果沒有這個標記,編譯時根本不會去嘗試。
如果您的系統配置得比較奇怪,您可能不得不為 configure 腳本設置一些非常詳細的變數,而且如果是在交叉編譯,您很可能得做一些非常特別的事情。CC 是 configure 用於指定 C 編譯器的變數,通過指定 CC 的值可以解決許多問題。如果您指定了編譯器,configure 將使用那個編譯器而不用去猜測需要使用哪一個。要注意的是,這樣您可以在命令行中指定選項和標記。例如,如果您希望編譯時支持調試符號,嘗試:CC="gcc -g -O1" ./configure(這里假定您使用的是 sh 系列的 shell;在 csh 中,用 setenv 來設置環境變數 CC。)閱讀 config.log當 configure 腳本運行時,它會創建一個名為 config.log 的文件,其中記錄的是測試日誌和得到的結果。例如,一個典型的 config.log 片斷如下:清單 3. config.log 的典型內容configure:2826: checking for getpwnam in -lsun
configure:2853: gcc -o conftest -g -O2 -fno-strength-rece conftest.c -lsun &5
ld: cannot find -lsun
configure:2856: $? = 1
configure: failed program was:
(a listing of the test program follows)如果我的系統中,-lsun 應該提供 getpwnam(),我應該可以使用命令行來對其進行確切檢查,然後再使用測試程序。只需進行少量這樣的調試,我就可以根據得到的信息來修改 configure 腳本。請注意有幫助的行號;這個測試從 configure 腳本的第 2,826 行開始。(如果您是一個 shell 程序員,您可能會喜歡在閱讀 configure 腳本片斷時列印出行號;在 shell 中 $LINENO 不能自動地被擴展為合理值,腳本使用 sed 創建一個包含有行號的自身拷貝!)當一個測試失敗或者得到意外的結果時,最好先去讀一讀日誌文件。請注意,有時測試失敗僅僅是因為上一個測試的失敗,這種失敗實際上並不重要。例如,configure 可能會因為找不到一個您聞所未聞的庫而退出,而這可能是因為測試標准 C 庫中某個功能的程序失敗而導致無法找到那個庫。在這種情況下,只需要解決第一個問題,第二個問題也就不會再出現了。
一種情況是測試程序設計不正確而可能

⑸ arm-none-linux-gnueabi/bin/ld: cannot find -lgtk-x11-2.0 請問這種情況是何緣故

找不到gtk庫
用交叉編譯器編譯的程序調用gtk庫,您要做睜迅者昌遲什麼悉薯?
ARM上是無法運行基於X-WINDOWS的GNOME界面的。

⑹ gcc編譯器究竟怎麼打開我竟然在gcc的安裝文件夾中找不到gcc的打開文件

你先用vim 或者直接用gedit編寫好程序,然後直接輸入命令就可以了,比如你的程序是helloworld.c,那麼你可以輸入命令:
編譯命令:gcc -o helloworld helloworld.c
運行命令./helloworld

希望這樣的回答對你有幫助!

gcc的使用方法

1。gcc包含的c/c++編譯器
gcc,cc,c++,g++,gcc和cc是一樣的,c++和g++是一樣的,一般c程序就用gcc編譯,c++程序就用g++編譯

2。gcc的基本用法
gcc test.c這樣將編譯出一個名為a.out的程序
gcc test.c -o test這樣將編譯出一個名為test的程序,-o參數用來指定生成程序的名字

3。為什麼會出現undefined reference to 'xxxxx'錯誤?
首先這是鏈接錯誤,不是編譯錯誤,也就是說如果只有這個錯誤,說明你的程序源碼本身沒有問題,是你用編譯器編譯時參數用得不對,你沒有指定鏈接程序要用到得庫,比如你的程序里用到了一些數學函數,那麼你就要在編譯參數里指定程序要鏈接數學庫,方法是在編譯命令行里加入-lm。

4。-l參數和-L參數
-l參數就是用來指定程序要鏈接的庫,-l參數緊接著就是庫名,那麼庫名跟真正的庫文件名有什麼關系呢?
就拿數學庫來說,他的庫名是m,他的庫文件名是libm.so,很容易看出,把庫文件名的頭lib和尾.so去掉就是庫名了。

好了現在我們知道怎麼得到庫名了,比如我們自已要用到一個第三方提供的庫名字叫libtest.so,那麼我們只要把libtest.so拷貝到/usr/lib里,編譯時加上-ltest參數,我們就能用上libtest.so庫了(當然要用libtest.so庫里的函數,我們還需要與libtest.so配套的頭文件)。

放在/lib和/usr/lib和/usr/local/lib里的庫直接用-l參數就能鏈接了,但如果庫文件沒放在這三個目錄里,而是放在其他目錄里,這時我們只用-l參數的話,鏈接還是會出錯,出錯信息大概是:"/usr/bin/ld: cannot find -lxxx",也就是鏈接程序ld在那3個目錄里找不到libxxx.so,這時另外一個參數-L就派上用場了,比如常用的X11的庫,它放在/usr/X11R6/lib目錄下,我們編譯時就要用-L/usr/X11R6/lib -lX11參數,-L參數跟著的是庫文件所在的目錄名。再比如我們把libtest.so放在/aaa/bbb/ccc目錄下,那鏈接參數就是-L/aaa/bbb/ccc -ltest

另外,大部分libxxxx.so只是一個鏈接,以RH9為例,比如libm.so它鏈接到/lib/libm.so.x,/lib/libm.so.6又鏈接到/lib/libm-2.3.2.so,如果沒有這樣的鏈接,還是會出錯,因為ld只會找libxxxx.so,所以如果你要用到xxxx庫,而只有libxxxx.so.x或者libxxxx-x.x.x.so,做一個鏈接就可以了ln -s libxxxx-x.x.x.so libxxxx.so

手工來寫鏈接參數總是很麻煩的,還好很多庫開發包提供了生成鏈接參數的程序,名字一般叫xxxx-config,一般放在/usr/bin目錄下,比如gtk1.2的鏈接參數生成程序是gtk-config,執行gtk-config --libs就能得到以下輸出"-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmole -lglib -ldl -lXi -lXext -lX11 -lm",這就是編譯一個gtk1.2程序所需的gtk鏈接參數,xxx-config除了--libs參數外還有一個參數是--cflags用來生成頭文
件包含目錄的,也就是-I參數,在下面我們將會講到。你可以試試執行gtk-config --libs --cflags,看看輸出結果。
現在的問題就是怎樣用這些輸出結果了,最苯的方法就是復制粘貼或者照抄,聰明的辦法是在編譯命令行里加入這個`xxxx-config --libs --cflags`,比如編譯一個gtk程序:gcc gtktest.c `gtk-config --libs --cflags`這樣就差
不多了。注意`不是單引號,而是1鍵左邊那個鍵。

除了xxx-config以外,現在新的開發包一般都用pkg-config來生成鏈接參數,使用方法跟xxx-config類似,但xxx-config是針對特定的開發包,但pkg-config包含很多開發包的鏈接參數的生成,用pkg-config --list-all命令可以列出所支持的所有開發包,pkg-config的用法就是pkg-config pagName --libs --cflags,其中pagName是包名,是pkg-config--list-all里列出名單中的一個,比如gtk1.2的名字就是gtk+,pkg-config gtk+ --libs --cflags的作用跟gtk-config --libs --cflags是一樣的。比如:gcc gtktest.c `pkg-config gtk+ --libs --cflags`。

5。-include和-I參數
-include用來包含頭文件,但一般情況下包含頭文件都在源碼里用#include xxxxxx實現,-include參數很少用。-I參數是用來指定頭文件目錄,/usr/include目錄一般是不用指定的,gcc知道去那裡找,但是如果頭文件不在/usr/include里我們就要用-I參數指定了,比如頭文件放在/myinclude目錄里,那編譯命令行就要加上-I/myinclude參數了,如果不加你會得到一個"xxxx.h: No such file or directory"的錯誤。-I參數可以用相對路徑,比如頭文件在當前目錄,可以用-I.來指定。上面我們提到的--cflags參數就是用來生成-I參數的。

6。-O參數
這是一個程序優化參數,一般用-O2就是,用來優化程序用的,比如gcc test.c -O2,優化得到的程序比沒優化的要小,執行速度可能也有所提高(我沒有測試過)。

7。-shared參數
編譯動態庫時要用到,比如gcc -shared test.c -o libtest.so

8。幾個相關的環境變數
PKG_CONFIG_PATH:用來指定pkg-config用到的pc文件的路徑,默認是/usr/lib/pkgconfig,pc文件是文本文件,擴展名是.pc,裡面定義開發包的安裝路徑,Libs參數和Cflags參數等等。
CC:用來指定c編譯器。
CXX:用來指定cxx編譯器。
LIBS:跟上面的--libs作用差不多。
CFLAGS:跟上面的--cflags作用差不多。
CC,CXX,LIBS,CFLAGS手動編譯時一般用不上,在做configure時有時用到,一般情況下不用管。
環境變數設定方法:export ENV_NAME=xxxxxxxxxxxxxxxxx

9。關於交叉編譯
交叉編譯通俗地講就是在一種平台上編譯出能運行在體系結構不同的另一種平台上,比如在我們地PC平台(X86 CPU)上編譯出能運行在sparc CPU平台上的程序,編譯得到的程序在X86 CPU平台上是不能運行的,必須放到sparc CPU平台上才能運行。
當然兩個平台用的都是linux。

這種方法在異平台移植和嵌入式開發時用得非常普遍。

相對與交叉編譯,我們平常做的編譯就叫本地編譯,也就是在當前平台編譯,編譯得到的程序也是在本地執行。

用來編譯這種程序的編譯器就叫交叉編譯器,相對來說,用來做本地編譯的就叫本地編譯器,一般用的都是gcc,但這種gcc跟本地的gcc編譯器是不一樣的,需要在編譯gcc時用特定的configure參數才能得到支持交叉編譯的gcc。

為了不跟本地編譯器混淆,交叉編譯器的名字一般都有前綴,比如sparc-xxxx-linux-gnu-gcc,sparc-xxxx-linux-gnu-g++ 等等

10。交叉編譯器的使用方法
使用方法跟本地的gcc差不多,但有一點特殊的是:必須用-L和-I參數指定編譯器用sparc系統的庫和頭文件,不能用本地(X86)
的庫(頭文件有時可以用本地的)。
例子:
sparc-xxxx-linux-gnu-gcc test.c -L/path/to/sparcLib -I/path/to/sparcInclude

⑺ 請問運行於不同CPU構架的linux,它們的軟體可以通用嗎

以上回答中jiangtao9999的比較靠譜兒。
是這樣:
1、Linux下的軟體幾乎都是c語言的;
2、如果你學過C語言,找找書應該有這樣一個概念:ANSI C,這個是一個C語言的標准,比如printf這個函數就屬於標准庫(也就是符合ANSI標準的)函數
3、假如你編寫了一個軟體,代碼中僅僅包含ANSI的庫函數,那麼沒有問題,只要是支持C語言的平台,都能正常運行,即:編寫了一個簡簡單單的helloworld到哪裡編譯運行都沒有問題。
【前提是:】編譯再運行,不編譯就運行是不可以的,比如printf函數在各種架構上的實現方式是不可能相同的,所以需要在arm的編譯器上再編譯一遍才可以。否則運行不了。
有的軟體平台可以不用編譯,直接運行,比如jiangtao9999說的java、Python什麼的,Java可以實現「一次編譯,滿哪運行」什麼的,而Python則是有了.py源代碼就可以無敵了,使用的時候不用你去執行編譯命令,直接執行即可。arm上實現這兩種語言都是很容易的——下載源代碼、編譯、安裝即可。
4、不同架構的Linux平台都要實現一個編譯器,這是很重要的,有了編譯器,才可以從源代碼安裝軟體。
5、使用非ANSI庫中的函數需要該Linux包含這個函數的實現,否則,編譯後的連接將不通過,比如一個軟體使用了GTK來實現圖形用戶界面,那麼就需要系統中包含了gtk的庫函數,這就叫依賴,安裝軟體,首先要解決依賴,依賴有時候解決起來很麻煩,所以軟體開發過程中盡量減少依賴,這樣方便安裝。
6、tar.gz這種格式的軟體包有可能是源代碼,有可能是可執行文件(這是因為那隻是一個壓縮包,內容是什麼不一定),這兩者不同。很多軟體以tar.gz格式發布源代碼,而qq的Linux版本屬於可執行文件,在幾乎所有Linux平台下面直接雙擊或者通過命令就可以使用。
7、如果你使用的是rpm包或者deb包或者是tar.gz文件包中可執行文件形式的軟體包,而不是tar.gz這種形式的源代碼,你需要使用相應的軟體包管理器安裝就行,
但這不意味著arm版本的deb和x86版本的deb文件是通用的,你能這樣用是因為所有的使用x86機器的軟體經過編譯或者交叉編譯(在arm平台上編譯x86平台上的軟體就叫交叉編譯)以後,運行於幾乎完全一樣的統一的平台上,實現軟體和系統的無縫對接,方便了用戶——一方面可以不用浪費編譯的時間,主要還是方便了那些不會編譯軟體的人。
8、我也正在學習Linux,所以很多地方不太對,這只是我現在的一些理解。jiangtao9999說的主要是和匯編有關,如果代碼的實現主要是在c語言水平,那麼就會由編譯器屏蔽掉指令集和寄存器什麼的。
9、要是在網路回答的答案能改改就好了,這樣錯誤就會少一點。
10、重新羅嗦一遍:
1在不重新編譯源代碼的情況下,x86下linux的軟體不可以運行於arm構架的Linux,即使運行也會奇卡。
2和在編譯是否時為X86的CPU構架優化了編譯無關。(把我問迷糊了,估計是無關)
3軟體在編譯時是否為X86的CPU構架而優化主要看作者了,資料可以參看http://www.gentoo.org/doc/zh_cn/gcc-optimization.xml
4和不同的安裝包格式有一定關系
5tar.gz格式的軟體包不能保證在不同架構的Linux都能運行
6在arm的linux安裝時解決依賴以後,乳溝編譯通過基本是沒什麼問題的
7不是所有源代碼在arm和x86下編譯一下就可以了,還需要做一些努力
8有源代碼可以對遇到的不通過的問題逐一解決,理論上可以實現所有軟體都能運行
9重新編譯過程中如果遇到依賴問題需要逐一解決

⑻ Unresolved inclusion:<iostream>

鑒於目前沒有人回答有實際作用的答案,我就在我會的非常少的基礎上回答你一下吧,最起碼我是仔困攔認真回答的
我分析這個問題可能是2個原因:

1:如h1040106051 回答的沒找到庫,但是就算知道沒沒找到庫你也沒辦法,所以你可以這樣做來解決這個問題。手動連接庫:把你需要的庫文件(可以是標准庫動態靜態的都算上)放在一個指定文件下如e盤下面新建個lib文件。然後選中你的工程按上面的工具欄中的project-》properties-》c/c++ BUild-》settings-》Mingw C++ Linker-》Librarias中會看到上下兩個工具欄。上面的是添加你要連接庫的名稱動態庫就添加一個dl就行,靜態庫就麻煩些,你要添加那個就把哪個庫的名字寫上去比如libso.a那麼你就添加so就行了。下面的工具欄添加你庫尺豎所在的路徑。OK第一個問題搞定了,隨便鄙視下就會裝13不回答實際問題的人。

2:就是GcooQ回答的所謂「插件」沒裝好,這個問題的本質念胡是你的交叉編譯工具沒有安裝好,如果是這樣的話,就找個教程自己重新安裝下看看,因為我也沒有這方面的資料,也需要網路,你就自己找找看看。但是還有個好解決的情況,那就是你在創建項目時候交叉編譯鏈選錯了。比如你要編譯Cpp文件但是你選的是GCC的編譯鏈,那麼就可能出現頭文件不識別的情況,這種情況你怎麼設置都是徒勞的。我不知道你的實際情況,我們用笨人方法,一個個試一下,看有沒有能識別的。OK第二種基本也能解決了。

我還是那句話,你會就告訴一下,不會就別發一句話糊弄人家,人家要知道怎麼解決就不在上面問了,OK?還自稱開發C的時候我不知道在哪?別太自大,會叫的狗不咬人!!!

都是我一個個的打的,希望採納。

⑼ 編譯android 源碼需要sdk環境嗎

下面是android學習手冊,可以查看編譯源碼,360手機助手中下載,

編譯環境:ubuntu9.10,widnows平台目前不被支持。

1)安裝必要的軟體環境

$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

官方推薦的就是上面這些,如果在編譯過程中發現某些命令找不到,就apt-get它。可能需要的包還有:

$ sudo apt-get install make
$ sudo apt-get install gcc
$ sudo apt-get install g++
$ sudo apt-get install libc6-dev

$ sudo apt-get install patch
$ sudo apt-get install texinfo

$ sudo apt-get install zlib1g-dev
$ sudo apt-get install valgrind
$ sudo apt-get install python2.5(或者更高版本)

需要注意的是,官方文檔說如果用sun-java6-jdk可出問題,得要用sun-java5- jdk。經測試發現,如果僅僅make(make不包括make sdk),用sun-java6-jdk是沒有問題的。而make sdk,就會有問題,嚴格來說是在make doc出問題,它需要的javadoc版本為1.5。

因此,我們安裝完sun-java6-jdk後最好再安裝sun-java5-jdk,或者只安裝sun-java5-jdk。這里sun-java6-jdk和sun-java5-jdk都安裝,並只修改javadoc.1.gz和javadoc。因為只有這兩個是make sdk用到的。這樣的話,除了javadoc工具是用1.5版本,其它均用1.6版本:

$ sudo apt-get install sun-java6-jdk

修改javadoc的link:

$ cd /etc/alternatives
$ sudo rm javadoc.1.gz
$ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc.1.gz
$ sudo rm javadoc
$ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc

2)設置環境變數

$ emacs ~/.bashrc

在.bashrc中新增或整合PATH變數,如下:

#java 程序開發/運行的一些環境變數

JAVA_HOME=/usr/lib/jvm/java-6-sun
JRE_HOME=${JAVA_HOME}/jre
export ANDROID_JAVA_HOME=$JAVA_HOME
export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export JAVA_HOME;
export JRE_HOME;
export CLASSPATH;
HOME_BIN=~/bin/
export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};

保存後,同步更新:

source ~/.bashrc

3)安裝repo(用來更新android源碼)

創建~/bin目錄,用來存放repo程序,如下:

$ cd ~
$ mkdir bin

並加到環境變數PATH中,在第2步中已經加入。

下載repo腳本並使其可執行:

$ curlhttp://android.git.kernel.org/repo>~/bin/repo
$ chmod a+x ~/bin/repo

4)初始化repo

repo是android對git的一個封裝,簡化了一些git的操作。

創建工程目錄:

$ mkdir android
$ cd android

repo初始化:

$ repo init -u git://android.git.kernel.org/platform/manifest.git

在此過程中需要輸入名字和email地址。初始化成功後,會顯示:

repo initialized in /android

在~/android下會有一個.repo的隱藏目錄。

5)同步源代碼

$ repo sync

這一步要很久很久。

6)編譯android源碼,並得到~/android/out目錄

$ cd ~/andoird
$ make

這一過程很久。

7)在模擬器上運行編譯好的android

編譯好android之後,emulator在~/android/out/host/linux-x86/bin下,ramdisk.img,system.img和userdata.img則在~/android/out/target/proct/generic下。

$ cd ~/android/out/host/linux-x86/bin

增加環境變數

$ emacs ~/.bashrc

在.bashrc中新增環境變數,如下

#java 程序開發/運行的一些環境變數

export ANDROID_PRODUCT_OUT=~/android/out/target/proct/generic
ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};

最後,同步這些變化:

$ source ~/.bashrc
$ cd ~/android/out/target/proct/generic
$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img

最後進入android桌面,就說明成功了。

8)編譯模塊

android中的一個應用程序可以單獨編譯,編譯後要重新生成system.img。

在源碼目錄下執行

$ . build/envsetup.sh (.後面有空格)

就多出一些命令:

- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.

可以加—help查看用法。

我們可以使用mmm來編譯指定目錄的模塊,如編譯聯系人:

$ mmm packages/apps/Contacts/

編完之後生成兩個文件:

out/target/proct/generic/data/app/ContactsTests.apk
out/target/proct/generic/system/app/Contacts.apk

可以使用

$ make snod

重新生成system.img,再運行模擬器。

9)編譯SDK

直接執行make是不包括make sdk的。make sdk用來生成SDK,這樣,我們就可以用與源碼同步的SDK來開發android了。

a)修改/frameworks/base/include/utils/Asset.h

『UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024』 改為 『UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024』

原因是eclipse編譯工程需要大於1.3M的buffer;

b)編譯ADT

由於本人不使用eclipse,所以沒有進行這步;

c)執行make sdk

注意,這里需要的javadoc版本為1.5,所以你需要在步驟1中同時安裝sun-java5-jdk

$ make sdk

編譯很慢。編譯後生成的SDK存放在out/host/linux-x86/sdk/,此目錄下有android-sdk_eng.xxx_linux- x86.zip和android-sdk_eng.xxx_linux-x86目錄。android-sdk_eng.xxx_linux-x86就是 SDK目錄。

實際上,當用mmm命令編譯模塊時,一樣會把SDK的輸出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出來。

此後的應用開發,就在該SDK上進行,所以把7)對於~/.bashrc的修改注釋掉,增加如下一行:

export PATH=${PATH}:~/android/out/host/linux-x86/sdk/android-sdk_eng.xxx_linux-x86/tools

注意要把xxx換成真實的路徑;

d)關於環境變數、android工具的選擇

目前的android工具有:

A、我們從網上下載的Android SDK,如果你下載過的話( tools下有許多android工具,lib/images下有img映像)
B、我們用make sdk編譯出來的SDK( tools下也有許多android工具,lib/images下有img映像)
C、我們用make編譯出來的out目錄( tools下也有許多android工具,lib/images下有img映像)

那麼我們應該用那些工具和img呢?

首先,我們一般不會用A選項的工具和img,因為一般來說它比較舊,也源碼不同步。其次,也不會用C選項的工具和img,因為這些工具和img沒有經過SDK的歸類處理,會有工具和配置找不到的情況;事實上,make sdk產生的很多工具和img,在make編譯出來out目錄的時候,已經編譯產生了,make sdk只是做了而已。

e)安裝、配置ADT
略過;

f)創建Android Virtual Device

編譯出來的SDK是沒有AVD(Android Virtual Device)的,我們可以通過android工具查看:

$ android list

創建AVD:

$ android create avd -t 1 -n myavd

可以android –help來查看上面命令選項的用法。創建中有一些選項,默認就行了。

再執行android list,可以看到AVD存放的位置。

以後每次運行emulator都要加-avd myavd或@myavd選項:

$ emulator -avd myavd

10)編譯linux內核映像

a)准備交叉編譯工具鏈

android代碼樹中有一個prebuilt項目,包含了我們編譯內核所需的交叉編譯工具。

b)設定環境變數

$ emacs ~/.bashrc

增加如下兩行:

export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin
export ARCH=arm

保存後,同步變化:

$ source ~/.bashrc

c)獲得合適的內核源代碼

$ cd ~/android

獲得內核源代碼倉庫

$ git clone git://android.git.kernel.org/kernel/common.git kernel
$ cd kernel
$ git branch

顯示

* android-2.6.27

說明你現在在android-2.6.27這個分支上,也是kernel/common.git的默認主分支。

顯示所有head分支:

$ git branch -a

顯示

* android-2.6.27
remotes/origin/HEAD -> origin/android-2.6.27
remotes/origin/android-2.6.25
remotes/origin/android-2.6.27
remotes/origin/android-2.6.29
remotes/origin/android-goldfish-2.6.27
remotes/origin/android-goldfish-2.6.29

我們選取最新的android-goldfish-2.6.29,其中goldfish是android的模擬器模擬的CPU。

$ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
$ git branch

顯示

android-2.6.27
* android-goldfish-2.6.29

我們已經工作在android-goldfish-2.6.29分支上了。

d)設定交叉編譯參數

打開kernel目錄下的Makefile文件,把CROSS_COMPILE指向剛才下載的prebuilt中的arm-eabi編譯器.

CROSS_COMPILE ?= arm-eabi-

LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,
$(call ld-option, -Wl$(comma)–build-id,))

這一行注釋掉,並且添加一個空的LDFLAGS_BUILD_ID定義,如下:

LDFLAGS_BUILD_ID =

e)編譯內核映像

$ cd ~/android/kernel
$ make goldfish_defconfig
$ make

f)測試生成的內核映像

$ emulator -avd myavd -kernel ~/android/kernel/arch/arm/boot/zImage

⑽ 如何在Windows下構建ARM Linux QT開發環境

在PC上,需要得到兩個版本的Qt,分別是:Qt-4.5.2和QtEmbedded-4.5.2-arm。前者包括了QtDesigner等基本工具,用於在PC上對程序的開發調試,使能確保程序放到板子上之前就符合設計的要求;然後用後者的庫將調試好的程序編譯成能在arm-linux平台上運行的程序。

Qt-4.5.2用從網上下載到的qt-x11-opensource-src-4.5.2.tar.gz編譯後安裝得到;QtEmbedded-4.5.2-arm用qt-embedded-linux-opensource-src-4.5.2.tar.gz編譯後安裝得到,Qt-embedded-linux-opensource-src-4.5.2.tar.gz還可以編譯成QtEmbedded-4.5.2-X86,但不需要。在編譯qt-embedded-linux-opensource-src-4.5.2.tar.gz之前,必須准備好arm-linux-gcc交叉編譯工具,用的是arm-linux-gcc-3.4.1。

所以先要准備好的軟體包有:

Pc的操作系統是:LINUX-ubuntu8.04。

下面是具體編譯安裝過程:

1、Qt-4.5.2的獲得將qt-x11-opensource-src-4.5.2.tar.gz復制到目錄:/home/chh/Project/qt,

2、然後解壓:

#tarzxvfqt-x11-opensource-src-4.5.2.tar.gz

得到一個新目錄:qt-x11-opensource-src-4.5.2

cd進入這個目錄,准備開始編譯。

3、在終端中這樣操作:

#./configure–qvfb//編譯配置,此過程大概歷時幾分鍾;#make//正式編譯,過程漫長,大概2個多小時;#cdtools/qvfb//進入此目錄,准備對它進行編譯#make//編譯,幾分鍾#cd../..//回到qt-x11-opensource-src-4.5.2主目錄,准備安裝#makeinstall//安裝,十幾分鍾吧;

4、此步必須以root身份完成,否則無法建立目錄

5、可以在/usr/local/下看到一個Trolltech目錄,進入該目錄發現Qt-4.5.2目錄已經出現,進入裡面的bin目錄,Designer等工具已經可以使用了。

6、編譯過程相當費時,所以可以直接拷貝已經編譯過的源碼,直接makeinstall。

7、至此,Qt-4.5.2的安裝已經順利完成。

QtEmbedded-4.5.2-arm的獲得

在編譯安裝qt-embedded-linux-opensource-src-4.5.2之前,必須先配置好arm-linux-gcc,將arm-linux-gcc-3.4.1.tar.bz2解壓到目錄:/usr/local下,此時local下出現一個名為arm的目錄,然後配置好環境變數:在/etc/profile添加一句:exportPATH=$PATH:/usr/local/arm/3.4.1/bin,保存後#source/etc/profile一下,讓它即時生效。否則下面的編譯過程會提示找不到arm-linux-gcc命令。現在可以開始編譯了:

將qt-embedded-linux-opensource-src-4.5.2.tar.gz復制到目錄:/home/chh/Project/qt,然後解壓:#tarzxvfqt-embedded-linux-opensource-src.tar.gz,得到新目錄qt-embedded-linux-opensource-src-4.5.2。

進入qt-embedded-linux-opensource-src-4.5.2目錄,首先進行configure。這里的參數很重要,必不可少的是-embeddedarm,所以最簡單的配置信息可以這樣:

./configure-embeddedarm

然後回車,就開始configure了,參數設置和參考文章一樣,裁減了很多,減少了編譯時間:


./configure-release-shared-fast-no-largefile-qt-sql-sqlite-no-qt3support-no-xmlpatterns-no-mmx-no-3dnow-no-sse-no-sse2-no-svg-no-webkit-qt-zlib-qt-gif-qt-libtiff-qt-libpng-qt-libmng-qt-libjpeg-makelibs-xplatformqws/linux-arm-g++-nomaketools-nomakeexamples-nomakedocs-nomakedemo-no-nis-no-cups-no-iconv-no-dbus-no-openssl-embeddedarm-little-endian-qt-freetype-depths16,18-qt-gfx-linuxfb-no-gfx-transformed-no-gfx-multiscreen-no-gfx-vnc-no-gfx-qvfb-qt-kbd-usb-no-glib


之後就可以編譯了,#make,漫長等待後再#makeinstall。Makeinstall還是需要root許可權。

完成後,在/usr/local/Trolltech下多了一個目錄:QtEmbedded-4.5.2-arm。

熱點內容
安卓泰拉瑞亞去哪裡買 發布:2025-07-18 20:01:05 瀏覽:694
flash編譯器 發布:2025-07-18 19:49:38 瀏覽:487
memcached源碼分析 發布:2025-07-18 19:22:42 瀏覽:866
android展示圖片 發布:2025-07-18 19:21:24 瀏覽:593
一台伺服器5個IP怎麼分配 發布:2025-07-18 19:12:34 瀏覽:862
貴陽分布式存儲行情 發布:2025-07-18 19:12:31 瀏覽:361
車場伺服器和工控機是如何連接的 發布:2025-07-18 19:10:19 瀏覽:938
計算機編程學什麼好 發布:2025-07-18 19:06:49 瀏覽:410
網吧用的伺服器是什麼伺服器 發布:2025-07-18 18:40:15 瀏覽:938
ftp命令使用 發布:2025-07-18 18:13:05 瀏覽:47