當前位置:首頁 » 編程軟體 » cortexa編譯環境搭建

cortexa編譯環境搭建

發布時間: 2023-05-11 02:27:05

① 怎樣在eclipse中搭建android開發環境

Android開發環境搭建的大致流程
1、JDK安裝:這是java運行和編譯環境,因為Android是基於Java的,所以開發Android首先要搭建Java運行環境。
2、Eclipse安裝:一種開發工具,可以通過安裝插件來擴展自身功能。
3、Android SDK安裝:Android軟體開發工具包,是一個開發工具的集合。
4、ADT安裝:ADT(Android Development Tools)在Eclipse編譯IDE環境中,需安裝ADT(Android Developer Tools)Plug-in,這是Android在Eclipse上的開發工具。
5、創建AVD:Android Virtual Device,就是Android運行的虛擬設備,他是Android的模擬器識別。建立的Android要運行,必須創建AVD,每個AVD上可以配置很多的運行項目。
詳細過程可以看這里:http://www.3g-e.org/Android/607.html

② MDK 可以 調試 arm cortex A系列

可以。
打開軟體工程,編譯,調試,建議使用BuildTarget編譯工畝陵程,也可用F7。Translate是編譯當源螞前活動文件,RebuildallTargetfiles是重新編譯所有目標文件。
軟體在線調試和硬體在線調試;由於現在硬體成本比較便宜,一般我們都使用硬體在線調試,雹耐埋也就是軟體直接下載到晶元,我們查看運行狀態。

③ 如何搭建嵌入式開發的硬體環境

前言

首先,這個教程在僅使用附帶的光碟鏡像文件里的資料的情況下,所搭建的嵌入式 ARM 開發環境可以滿足 ARM 核為 ARM920T 及 CORTEX-A8 的嵌入式開發需求。

其次,搭建針對處理器為 ARM920T 的開發環境步驟如下:

WINDOWS 系統:

1、 用 WINRAR 或 7zip 打開鏡像文件 linux-dev.iso,將/WIN32/Daemon_Tools_4.46.1.328.exe 拖出來,

安裝後運行;

2、 使用 Daemon 載入鏡像文件 Linux-dev.iso 後,找到並雙擊/vmplayer/VMware-player-5.0.1-894247.exe 運行,安裝完成;

3、 將/VMware-linux-tools.iso 復制到任何地方,譬如 D:\Virtual Machines\ 文件夾下;4、 將文件夾/Ubuntu 復制到電腦的任何地方,譬如 D:\Virtual Machines\ 文件夾下;

5、 打開 VMware Player,這是一個免費的軟體,所以不需考慮不能使用的情況,更不需破解。效果圖如下:

嵌入式開發環境的搭建

點擊」Open a Virtual Machine」,找到剛才復制的 Ubuntu 文件夾,選中 Ubuntu.vmx 這個文件:

嵌入式開發環境的搭建

後點擊打開;

6、 點擊」Edit virtual machine settings」,這里需要注意的是,若你的電腦 CPU 是單核的,需將」Processors」由 2 設置為 1,否則,不能運行。選擇」CD/DVD (IDE)」,之後點擊右邊的」Browse…」,找到並選擇剛才復制的 VMware-linux-tools.iso,之後點擊」Options」進入另一個設置界面;

7、 選擇第三個」Shared Folders」,在右邊將其設置為」Always enabled」,再點擊下面的」Add…」,選擇一個在硬碟上新建的空文件夾,譬如 D:\Virtual Machines\shared 文件夾,點擊」Next》」,之後點擊」Enable this share」,最後在設置主界面點擊」OK」完成設置;

8、 將虛擬光碟機載入的光碟中 Linux 文件夾中的所有文件都復制到上一步新建的空文件夾,譬如

D:\Virtual Machines\shared 文件夾下;

9、 在 VMware Player 下點擊圖標 以運行虛擬機 Linux,啟動後可以看到桌面上有一個光碟的圖標;

10、 在 Linux 桌面右鍵後選擇」Open in terminal」,之後切換到/tmp 目錄:cd /tmp ;11、 執行命令 tar zxf /media/cdrom0/VMwareTools-9.2.2-893683.tar.gz ,等待約一分鍾後運行完畢;

12、 切換目錄:cd 。/vmware-tools-distrib/ ;

13、 執行命令:sudo 。/vmare-install.pl ,用戶」user」的密碼為 redeem2012 ;

14、 下面出現很多問題,[yes]或[no],那麼就可以一直點擊鍵盤 ENTER 鍵選擇默認設置,直至安裝完成;15、 人,活著,要有耐心——這個過程稍長,顯示最後兩行為」Enjoy, --the WMware team」時就安裝完成了;

16、 以上幾個步驟如下:

嵌入式開發環境的搭建

17、 執行命令:sudo reboot 以重啟;

18、 啟動後在桌面右鍵選擇」Open in terminal」,輸入命令:cd /mnt/hgfs/shared ,當然若之前選擇的空享空文件夾名稱與 shared 不一樣,可能不是這個目錄,唉,管不了這么多了;19、 查看目當下文件如下:

嵌入式開發環境的搭建

20、 安裝 libusb-1.0.9.tar.bz2,依次輸入以下命令:tar jxf libusb-1.0.9.tar.bz2 、

cd libusb-1.0.9 、 。/configure --prefix=/usr 、 make 、 sudo make install ,注意最後一步需要輸入密碼 redeem2012,完了之後返回原目錄: cd 。。/ ;21、 安裝 readline-6.2.tar.gz,依次輸入以下命令:tar zxf readline-6.2.tar.gz 、 cd readline-6.2 、。/configure --prefix=/usr 、 make 、 sudo make install ,完了之後返回原目錄:cd 。。/ ;

22、 安裝交叉編譯器:sudo tar arm-linux-gcc-3.4.5.tar.bz2 -C /home ;

23、 更改環境變數:gedit /home/user/.profile ,在最後一行添加這么一句:export PATH=$PATH:/home/user/gcc-3.4.5-glibc-2.3.6/bin ,保存後退出

24、 切換回用戶主目錄:cd ~ ;

25、 執行命令:tar jxf /mnt/hgfs/shared/JLink_Linux_V422.tar.bz2 ;

26、 依次執行以下命令:cd JLink_Linux_V422/ 、 sudo cp libjlinkarm.so.* /usr/lib ,現在就可以

運行 JLink 了: sudo 。/JLinkExe ,但要注意這么一點:由於現在運行的是 windows 系統下的虛擬機, Linux 操作系統無法訪問到 JLink,那麼就需要按下圖所示選擇將連接到電腦的 JLink 直接送給虛擬機中運行的 Linux。我沒有 JLink,所以下圖中沒有,你需要自己選擇硬體並點擊箭頭後再點擊」connect」:

嵌入式開發環境的搭建

另外,下面需要安裝 minicom,也需要按上圖將串口連接到 Linux 操作系統;

27、 這一步安裝minicom。將虛擬機文件夾 Ubuntu 下的 minicom_2.3-1ubuntu2_i386.deb 復制到shared文件下,之後執行命令:sudo dpkg --install /mnt/hgfs/shared/ minicom_2.3-1ubuntu2_i386.deb

到這一步,windows 系統下的嵌入式 ARM 開發環境搭建完成了。重啟一下更好。

至於 Linux 系統下的配置,這要復雜得多,因為系統情況完全不一樣,因而,這里不再給出,當然,所有的軟體也跟上面的完全一樣。

另外,minicom、JLink 的配置和使用,這里就不說了,自己到網上去找吧,若搞不好,就當自虐了。反正我已經送佛到西了,整個過程不需要仍何網路,不需要上網

所附的光碟鏡像文件中還有一些 windows 下的軟體,如 SecureCRT、arm-none-linux-gcc 等,這些也能用到,只不過我沒那個心情講更多了,以上的配置已經完全足夠了。

網路是個好東西,沒有網路,就沒有 LINUX,也沒有快速學習的條件。所以——現在,自學去吧。

④ 在Ubuntu的環境下怎麼交叉編譯grpc到cortex-a9架構

1、 解壓工具鏈壓縮
$ cd ~
$ mkdir toolchain
$ cd toolchain
gcc-4.6.4.tar.xz拷貝到toolchain目錄下並解壓
$ tar xvf gcc-4.6.4.tar.xz

2、 環境變數的添加
修改文件/etc/bash.bashrc添加如下內容
export PATH=$PATH:/home/linux/toolchain/gcc-4.6.4/bin
重啟配置文件
$ source /etc/bash.bashrc

⑤ 如何使用GNU編譯器GCC來編譯Cortex-M3

MinGW是指只用自由軟體來生成純粹的Win32可執行文件的編譯環境,它是Minimalist GNU on Windows的略稱。

實際上 MinGW 並不是一個 單純的C/C++ 編譯器,而是一套 GNU 工具集合。除開 GCC 以外,MinGW 還包含有一些其他的 GNU 程序開發工具 (比如 gawk bison 等等)。
開發 MinGW 是為了那些不喜歡工作在 Linux(FreeBSD) 操作系統而留在 Windows 的人提供一套符合 GNU 的 GNU 工作環境。
所以,使用 MinGW 我們就可以像在 Linux 下一樣使用 GNU 程序開發工具。
GCC 就是 MinGW 的核心所在,GCC 是一套支持眾多計算機程序語言的編譯系統,而且在語言標準的實現上是最接近於標準的。並且 GCC
幾乎可以移植到目前所有可用的計算機平台。(我的電腦上就還裝有 DevKitPro,裡麵包含 GCC 的 ARM(for GBA/DS/GP32)
和 MIPS(for PSP) 版本。)
GCC 本身不像 VC 那樣擁有IDE 界面(在 Windows 上也存在 Dev C++ 之類的支持 MinGW 編譯器的
IDE)。源代碼編輯你可以選用任何你喜歡的文本編輯器(據說微軟的開發人員包括 VC 的開發都不用 VC 所帶的 IDE 編輯器,而是選用 GNU
的 VIM 編輯器)。然後使用 make 等工具來進行軟體項目的編譯、鏈接、打包乃至發布。而像 cvs(svn)
源代碼版本控制工具可以讓世界上任何一個角落的人都可以參與到軟體項目中來。

2.下載MinGW
一種方法是到Sourceforge(http://sourceforge.net/project/showfiles.php?group_id=2435)下載一個MinGW-2.0.0-3.exe。

但是我配置的時候我電腦上安裝了codeblocks,已經自帶了MinGW。

3.環境變數的配置
在(系統屬性-->高級-->環境變數-->系統變數 中)(以下目錄都根據自己的電腦MinGW所在位置不同而改變)

a.在PATH的值中加入「C:\Program Files\MinGWStudio\MinGW\bin」。這是尋找gcc編譯器的路徑。如果PATH中還有其他內容,需要用英文狀態下分號進行分割

b.新建LIBRARY_PATH變數,在其值中加入「C:\Program Files\MinGWStudio\MinGW\lib」。這是標准庫存放的路徑。

c.新建C_INCLUDE_PATH變數,在其值中加入「C:\Program Files\MinGWStudio\MinGW\include」。這是Include查找頭文件的路徑。

4.驗證gcc是否正常運行
在cmd控制台窗口下面,輸入gcc -v。若已經成功安裝好,會顯示gcc的版本信息。

⑥ arm-linux-gcc交叉編譯器的製作,以及版本選擇問題。

,需要必須有足夠動經驗來支持。
另外,用 RH9 的都是高手,我想你的知識不需要來提問了吧?

1、在 PC 上編譯 arm 的程序當然需要較差編譯器,這個需要自己安裝,或者著現成的交叉編譯器環境,一般是一個特殊參數編譯出來的 gcc + binutils + glibc + linux-header。這個每個人動環境不同,一般都需要自己編譯一個,當然沒有特殊需求,也可以找現成的。不過很難找,因為這套環境還要和你動系統搭配,不然環境不匹配,連這個環境都不能運行,那就更談不上編譯東西了。
有關自己編譯搭建交叉編譯環境,可以看看一個特殊的 Linux 發行版 LFS 的分支: CLFS 。

2、移植分很多意思,移植有可能就意味著這套源代碼不能在目標系統上面編譯,需要你根據相應的知識去修改源代碼來讓這套代碼適應目標編譯器的要求,比如源代碼有 SSE4 的優化,這套程序在非 SSE4 CPU 上無法編譯運行,但目標機器連 SSE1 都不支持。那麼就需要移植。
或者移植僅僅是根據新的環境進行編譯,不需要進行源代碼修改,只需要進行一下編譯就能運行的程序,也可以稱為移植,就是從一個環境、架構 -》另一個環境、架構。都可以稱為移植,但真正的移植意味著修改程序源代碼來適應新環境。你說的這種移植是最簡單的移植。

3、決定目標硬體環境 -》搭建目標編譯器 -》製作目標環境(內核,基礎軟體庫)-》進行應用移植(移植需要的軟體、主應用程序)-》搭建系統文件系統 -》導入目標系統-》啟動目標系統&應用。說起來很簡單,因為這是完全沒有問題的條件下。
至於超級終端。那是用來控制目標系統的。目標系統有可能不能插鍵盤滑鼠顯示器,這就需要一個遠程網路鏈接來進行控制。以及通過遠程鏈接來發送數據。這都需要終端的支持。

虛擬機下面進行開發,不能發揮你的計算機的性能。而且因為隔著 VMware 的軟體模擬層,可能還不會很方便的讓你鏈接目標設備。

至於用 socket ,我還沒見到你的目標需要這個東西,因為所有的東西都是現成的源代碼。不需要你從 0 開始寫,當然你想自己寫一個系統內核,或者伺服器程序,或者全套的系統+應用,我絕對不攔你,但希望你寫完這套東西,能把源代碼發布出來。
ads 可以認為是一個支持環境,他本身不是一個系統的開發 SDK 。
-------------------------------------
ads 沒用過,印象里他還有模擬器,調試器什麼的程序。功能上要比 Linux 開發環境,WinCE 環境下面的東西更多更偏向於硬體方面,畢竟 ads 是 arm 出品的,不太可能偏向於軟體部分設計。Linux 和 WinCE 都是系統而不是硬體工具。

你可以認為交叉編譯器是一個應用程序,一個輸出器。把源代碼輸出為 arm 的代碼,這個應用程序的輸出,是靠他自己的環境,而不是當前系統的環境的。
當前系統的各個軟體的版本,不能影響交叉編譯器輸出的環境(理論上,現實有的時候總是從別的地方給你打擊……),交叉編譯器一般至少有 gcc 、binutils 、glibc 庫、linux kernel 頭文件。

在軟體需求上。
頭文件誰都不依賴,glibc 只需要內核頭文件,其他程序全都依賴於 glibc 。也就是所有程序都不依賴內核,僅僅是依賴於內核頭文件。

gcc 和 binutils 是把程序源代碼根據上面各個環節的需提供的功能來輸出為上面環節裡面的二進製程序。依賴你當前環境的,只有 gcc 和 binutils 兩個程序的執行、控制環節。只有他們兩個依賴的,而不是你的交叉編譯後的程序。

至於編譯器版本的選擇,新版本功能更好,舊版本兼容更好。
這個要看你的實際需要了。應用程序源代碼也調編譯器的,同時也依賴於軟體庫的功能。

arm 開發建議穩定、兼容優先。當然也可以嘗試最新的編譯環境,來獲取更好的優化(前提是還有什麼代碼優化的話)。
另外,團IDC網上有許多產品團購,便宜有口碑

⑦ 如何編譯OpenWrt

搭建編譯環境。編譯建議在Linux下進行。我的系統是Linux mint 17,執行以下命令,構建編譯環境:

sudo apt-get update
sudo apt-get install git-core build-essential

獲取openwrt源碼。在當前用戶主目錄下執行

git clone git://git.openwrt.org/openwrt.git

等待代碼下載。結束後,目錄下會出現openwrt文件夾。
配置軟體源。進入openwrt目錄,執行

./scripts/feeds update -a

./scripts/feeds install -a

檢查編譯環境是否完整:

make defconfig

make prereq

根據提示信息安裝需要的軟體包。如果提示類似

「tmp/.config-package.in:22022:warning: multi-line strings not supported」

的信息,打開 openwrt/tmp/.config-package.in,定位到對應行,添上丟掉的一個引號就可以了。
編譯選項:

執行 make menuconfig,根據路由器情況,選擇 Target System 和 Subtarget。如意雲一代和極壹S的 Target System 均為 Ralink RT288x/RT3xxx 。對於Subtarget ,前者為 MT7620n based boards ,後者為 MT7620a based boards。

其他選項根據個人喜好選擇。一般來說要選中LuCI界面,選中中文語言包等等。
開始編譯:

執行 make -j2 V=s 進行編譯。-j後面的數字是電腦物理CPU數量加一。V=s可以顯示出編譯的詳細信息。首次編譯大概需要幾個小時的時間。
錯誤排查:

編譯失敗,一般有兩種情況:

1.代碼下載鏈接失效。首次編譯時,編譯程序會實時從網上下載一些軟體包的代碼。如果下載鏈接失效,編譯就會失敗。這時需要根據軟體包的名稱,從網上自行下載,然後放在 openwrt/dl/ 目錄下,執行 make -j2 V=s 繼續編譯即可。

2.軟體包自身有問題。這時重新執行 make menuconfig ,取消對應軟體包選中即可。這種情況比較少見,目前已知的有 tor 等。

編譯成功,但沒有生成固件。這種情況一般是因為選中的軟體包過多,導致固件大小超過16MB。重新執行 make menuconfig,去掉一些軟體包,重新執行編譯即可。
得到固件。在排除了所有錯誤後,現在終於得到了固件。對於如意雲RY-1,固件在 openwrt/bin/ramips 目錄下,形如

openwrt-ramips-mt7620n-rt-n14u-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-wrtnode-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-mlw221-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-wr8305rt-squashfs-sysupgrade.bin

等等。

⑧ ubuntu 下怎麼搭建kodi 編譯環境

1. 安裝Ubuntu。
2. 安裝gcc
方法一:
sudoapt-get install build-essential
安裝完了可以執行
gcc--version的命令來查看版本,輸出如下:
gcc(GCC)4.2.3(Ubuntu4.2.3-2ubuntu7)
Copyright(C)2007FreeSoftwareFoundation,Inc.
編譯則使用Ubuntu gcc命令。要往下學習首先就得熟悉gcc命令的用法。
Ubuntugcc命令提供了非常多的命令選項,但並不是所有都要熟悉,初學時掌握幾個常用的就可以了,到後面再慢慢學習其它選項,免得因選項太多而打擊了學習的信心。
一. 常用編譯命令選項假設源程序文件名為test.c。
1. 無選項編譯鏈接
用法:#gcc test.c
作用:將test.c預處理、匯編、編譯並鏈接形成可執行文件。這里未指定輸出文件,默認輸出為a.out。
2. 選項 -o
用法:#gcc test.c -otest
作用:將test.c預處理、匯編、編譯並鏈接形成可執行文件test。-o選項用來指定輸出文件的文件名。
3. 選項 -E
用法:#gcc -E test.c -otest.i
作用:將test.c預處理輸出test.i文件。
4. 選項 -S
用法:#gcc -S test.i
作用:將預處理輸出文件test.i匯編成test.s文件。
5. 選項 -c
用法:#gcc -c test.s
作用:將匯編輸出文件test.s編譯輸出test.o文件。
6. 無選項鏈接
用法:#gcc test.o -otest
作用:將編譯輸出文件test.o鏈接成最終可執行文件test。
7. 選項-O
用法:#gcc -O1 test.c -otest
作用:使用編譯優化級別1編譯程序。級別為1~3,級別越大優化效果越好,但編譯時間越長。
二. Ubuntu gcc多源文件的編譯方法
如果有多個源文件,基本上有兩種編譯方法:
[假設有兩個源文件為test.c和testfun.c]
1. 多個文件一起編譯
用法:#gcc testfun.ctest.c -o test
作用:將testfun.c和test.c分別編譯後鏈接成test可執行文件。
2. 分別編譯各個源文件,之後對編譯後輸出的目標文件鏈接。
用法:
#gcc -ctestfun.c //將testfun.c編譯成testfun.o
#gcc -ctest.c //將test.c編譯成test.o
#gcc -otestfun.o test.o -o test //將testfun.o和test.o鏈接成test
以上兩種方法相比較,第一中方法編譯時需要所有文件重新編譯,而第二種方法可以只重新編譯修改的文件,未修改的文件不用重新編譯。

3. 安裝eclipse
a) 安裝配置java(eclipse需要)
Ubuntu 在安裝時,如同大部分Linux 發行版一樣,都會同時安裝 GNU 版本的 Java。這個 Java 的實用程度太低,尤其對於開發人員來說,是沒有太多用處的。在 Ubuntu 下,安裝 SUN Java 是一件很容易的事情。第一步:
sudoapt-get install sun-java6-jdk
安裝完畢之後,選擇默認 java:
sudo update-alternatives --config java
然後配置環境變數:
sudo vim /etc/environment
在其中添加如下兩行:(不同版本應不同,這里是java6)
CLASSPATH=/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun保存退出。
b) 安裝 Eclipse
sudo apt-getinstall eclipse-platform
sudo apt-get install eclipse-pde
雖然已經這時新安裝的java 已經成為系統默認的 jvm,但是 Eclipse 並不會用 update-alternative 設置的 jvm 來啟動自身,而使用的是以前的 GNU Java。GNU Java 是 1.4.2 的實現,而且在性能上遠不如 SUN 的實現。為了讓 Eclipse 利用 SUN Java 啟動,我們還需要繼續配置。首先將 SUN Java 完完全全的設置為系統的默認 JDK:
sudo update-java-alternatives -s java-6-sun
然後編輯 JVM 配置文件:
sudo vim /etc/jvm
將文件中的
/usr/lib/jvm/java-6-sun
這一行填入到配置塊的頂部。由於 Eclipse 會忽略 Ubuntu 的通用 Java 設置(貌似一個 bug),我們需要繼續編輯 Eclipse 的 java_home 文件:
sudo vim /etc/eclipse/java_home
如同上面一樣,將
/usr/lib/jvm/java-6-sun
這一行填入到文件的頂部。
c) 安裝 Eclipse, c/c++插件

1、啟動eclipse,
2、選擇Help->InstallNew Software...,在Work with的框框下復制下面的地址: http://download.eclipse.org/releases/galileo
3、選擇Collaboration->MylynBridge: C/C++ Development,安裝,重啟eclipse。
4、同上述2、3,選擇ProgrammingLanguages->Eclipse C/C++ Development,都選上吧,現在硬碟不貴的。重啟eclipse,試試吧,有tutorial的。
備註:有些版本還需要安裝GTK+庫,使用apt-getinstall libgtk2.0*可得到

4. 安裝g++
方法一:
sudo apt-get install make gcc g++
再裝上函數手冊
sudo apt-get install manpages-dev
方法二:
sudo apt-get install build-essential
執行完後,完成了gcc,g++,make的安裝。build-essential 是一整套工具,gcc,libc等等

5. 虛擬機下共享文件
Windows和Linux間有很多文件共享的方式,這里我總結了一下。假設你的Host計算機是Windows,Guest是Linux哈。
1.利用Samba
這是我用得最多的方式
備註:試了一下,比較麻煩
2.在Linux下配置Apahce
在Linux下配置Apahce,然後在Windows下通過www方式把Linux下的文件下載下來。這種方式只能把Linux的文件傳到Windows,不能把Windows的文件傳到Linux.
3.在Linux下配置ftp
用vsftp或者wu-ftp都可以,配置成上傳許可權的,然後Windows和Linux就可以相互共享文件了。
4.Windows下配置WWW服務
用IIS,Apache或者其它的都可以。如果你的Linux只有命令行的話,就用wget命令吧,可以很方便地下載文件。
5.Windows下配置Ftp
用serv-u比較簡單
6.利用Windows的文件共享功能
比如說你的Windows的IP為192.168.0.1,共享了一個叫share的目錄,那麼就可以用下列命令
mount -t smbfs //192.168.0.1/share /mnt -o username=user%passwd
或者smbmount//192.168.0.1/share /mnt -o username=user%passwd(用這個命令要安samba哦)
7.用vmware tools工具
SharedFolders是Vmware4 的一個新功能,更加方便了在Host,Guest操作系統間共享文件。但是使用前要安裝vmwaretools.
點擊setting->vmwaretools install
mount /dev/cdrom /mnt/cdrom
cd /mnt/cdrom
裡面有一個vmwaretools的tar包,解開執行vmware-tools-install.pl腳本,一路回車,一般沒有問題。
點擊Edit->VirtualMachine Settigns->Option->SharedFolders->Add,選定要共享的文件夾並給這個文件夾命名,下一步。選定「Enable thisshare」,確定以後,vmware會把這個文件夾自動mount到/mnt/hgfs目錄下。
備註:是否成功和ubuntu與vmwaretools的版本有關,需要彼此匹配。
8.直接掛接物理硬碟或者硬碟分區
不過vmware也是支持直接mountHost機器的磁碟,方法是在虛機設置里新建磁碟,類型選「Usephysicaldisk(foradvanced users)」,再選定磁碟和分區就可以。但是這樣的操作可能會引會文件系統的不一致,導致錯誤,不推薦使用。
9.用ISO文件
虛擬機裡面的光碟機可以有物理光碟機和ISO文件兩種,我們可以把我們的文件重點製件成ISO文件(用WinIso),然後在Linux中作為CDROM掛接。

6. Samba安裝
Ubuntu下samba的安裝設置
步驟1:Ubuntu下安裝samba
#apt-getinstall samba4
#apt-getinstall smbfs
步驟2:添加linux用戶
#useradser1 //添加用戶名user1
#passwser1 //給用戶名user1添加密
#mkdir/home/user1 //建立user1的home目錄,如果不用這個用戶名來登陸linux,此步驟不是必需
#chown-R user1:user1 /home/user1//給user1的home目錄設置好許可權
步驟3:給samba伺服器添加用戶
說明:登陸samba的用戶必須已經是linux中的用戶
#smbpasswd-a user1 //添加並給user1設置samba密碼
步驟4:smb.conf設置
#cd/etc/samba //進入設置目錄
#mv smb.confsmb.conf.bak//做好備份,直接將系統默認配置文件改名
#vimsmb.conf //建立和配置smb.conf文件
[global]
workgrop=x1 //X1為你區域網中的工作組名
serverstring=x2 //x2為你linux主機描述性文字,比如:samba server。
security=user//samba的安全等級,user代表需要輸入用戶名和密碼,改成share則不需要輸入用戶名和密碼
[x3] //方框號中的x3這個名字可以隨便取,只是在win的網上鄰居中顯示的共享文件夾名
path=/home/x4//x4為你要共享的文件夾名,在共享前還要建立這個文件夾,並設好許可權以便訪問,下面會說明。
valisers=user1 //這個x4共享目錄只允許user1這個用戶進入
public=no //no表示除了user1這個用戶,其它用戶在進入samba伺服器後看不見x4這個目錄,如果為yes,雖然能看見x4這個目錄,但除了user1這個用戶能進入這個目錄,其它人進不了。
writable=yes //允許user1在x4目錄中進行讀和寫操作,反之no
//存檔退出
#testparm //檢查一下語法錯誤,比如拼錯
步驟5:建立共享目錄
#mkdir /home/x4
#chown -R user1:user1 /home/x4 //因為是root建立的目錄,其它用戶只有讀的許可權,所還得把許可權改一下。當然也可以簡單的用#chmod 777 /home/x4。還有個問題就是共享里目錄的文件如果有些能訪問有些不能訪問,那肯定也是許可權的問題,進入/home/x4,直接#chmod 777 *來解決。
步驟6:重啟samba服務
#/etc/init.d/samba restart

7. windows客戶端連接到samba伺服器
首先確保你的服務端已經配置好samba並成功啟動服務,方法可參考此文章http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.aspx,我們就可以從Windows 客戶端通過Windows網路連接到Samba,這里以 Windows XP 為例,有兩種方法:
1、網上鄰居-->查看工作組計算機-->SambaServer
2、打開運行(windows鍵+R),輸入配置samba伺服器的主機名或者IP(格式:\\192.168.1.98)
3、進入samba可以看到我們配置的共享目錄名,此文章中http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.aspx的步驟4配置的為share
4、第一次登錄需要輸入用戶名和密碼,此文章中http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.aspx的步驟6配置的為username的用戶名,可勾選記住我的密碼,以後在此機器訪問samba伺服器就可以直接登錄了。

8. cvs客戶端設置
ubuntu有兩種cvs客戶端程序:cvs和cvsnt。
我安裝了cvsnt
0. 安裝cvsnt
1. 在~/.bashrc設置CVSROOT變數:
exportCVSROOT=:pserver:[email protected]:/export/home/cvsroot
改了以後,用戶需要重新注冊
2. 創建cvs目錄 mkdir~/cvsroot
3. cdcvsroot
cvs login
xxx(密碼)
4.checkout項目:
cvs co a/b/project/src
5. 常用命令:(斜杠後表示縮寫)
cvs checkout / co
cvs update / up
cvs commit / ci
查看一個文件的提交情況:cvs logfilename
對比兩個版本文件的情況:cvs diff -r version_1 version_2 file_name
6. 獲得一個文件的歷史版本
cvs update -r 1.3 test.c
-r 後,文件成為一個tag,是無法修改的,需重新從根目錄checkout

9. 安裝 vim
sudo apt-get install vim

10. 安裝vfftp
sudoapt-get install vsftpd
察看是否打開21埠
Sudonetstat –tulnp | grep 21
登陸
ftp localhost
輸入Ubuntu的用戶名、密碼登陸
ls(會顯示home目錄的文件)
運行:
standalone
最普通的方式
Sudoservice vsftpd

⑨ 如何搭建 android 開發環境

一.認識android的架構
Android其本質就是在標準的Linux系統上增加了Java虛擬機Dalvik,並在Dalvik虛擬機上搭建了一個JAVA的application framework,所有的應用程序都是基於JAVA的application framework之上。
android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。
二.搭建環境
搭建開發環境
對國內的開發者來說最痛苦的是無法去訪問android開發網站。為了更好的認識世界,對程序員來說,會翻牆也是的一門技術,帶你去領略牆外的世界,好了,不廢話了, 國內開發者訪問(androiddevtools) 上面已經有了所有你要的資源,同時可以下載到我們的主角framework
但是這樣的搭建只能去閱讀源代碼,我們無法去更進一步去實現自己的rom,我們看到錘子的系統在早期的開放rom是自己從新實現了framework的代碼,現在看起來他成功了,所以我們還要去搭建android系統的源碼編譯環境。
搭建源碼編譯環境

三.開始主題
在一開始寫c程序的時候都有一個運行的入口,比如
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
//這里的main就是應用的入口
int main(int argc, const char * argv[]){
return 0;
}
在計算機網路原理中我們用socket實現一個伺服器端,不斷的接聽客戶端的訪問,而且他的代碼是這樣實現的:
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")
#include <stdio.h>
void main()
{
WORD wVersionRequested;//版本號
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//載入套接字型檔,如果失敗返回
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}
//判斷高低位元組是不是2,如果不是2.2的版本則退出
if (LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2)
{
return;
}
//創建流式套接字,基於TCP(SOCK_STREAM)
SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);
//Socket地址結構體的創建
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//轉換Unsigned long型為網路位元組序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定埠號,除sin_family參數外,其它參數都是網路位元組序,因此需要轉換
//將套接字綁定到一個埠號和本地地址上
bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//必須用sizeof,strlen不行
listen(socSrv, 5);
SOCKADDR_IN addrClient;//字義用來接收客戶端Socket的結構體
int len = sizeof(SOCKADDR);//初始化參數,這個參數必須進行初始化,sizeof
//循環等待接受客戶端發送請求
while (1)
{
//等待客戶請求到來;當請求到來後,接受連接請求,
//返回一個新的對應於此次連接的套接字(accept)。
//此時程序在此發生阻塞
SOCKET sockConn = accept(socSrv, (SOCKADDR*)&addrClient, &len);
char sendBuf[100];
sprintf(sendBuf, "Welcome %s to JoyChou",
inet_ntoa(addrClient.sin_addr));//格式化輸出
//用返回的套接字和客戶端進行通信
send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多發送一個位元組
//接收數據
char recvBuf[100];
recv(sockConn, recvBuf, 100, 0);
printf("%s\\n", recvBuf);
closesocket(sockConn);
}
}
他採用了一個while死循環去監聽客戶端的請求。

先上源代碼
public final class ActivityThread {
public static void main(String[] args) {
SamplingProfilerIntegration.start();
CloseGuard.setEnabled(false);
Environment.initForCurrentUser();
EventLogger.setReporter(new EventLoggingReporter());
Security.addProvider(new AndroidKeyStoreProvider());
final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);
Process.setArgV0("<pre-initialized>");
Looper.prepareMainLooper();
//從中可以看到為app開辟了一個線程進入了looper之中
ActivityThread thread = new ActivityThread();
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
AsyncTask.init();
if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
}
看到源碼失望了,沒有一個while循環啊,其實用了他方法實現
//用一個looper的機制循環監聽響應
Looper.prepareMainLooper();
Looper.loop();
進一步深入代碼
public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
}
final MessageQueue queue = me.mQueue;
Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();
// 在這里看到了一個循環監聽消息
for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}
Printer logging = me.mLogging;
if (logging != null) {
logging.println(">>>>> Dispatching to " + msg.target + " " +
msg.callback + ": " + msg.what);
}
msg.target.dispatchMessage(msg);
if (logging != null) {
logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
}
// Make sure that ring the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, "Thread identity changed from 0x"
+ Long.toHexString(ident) + " to 0x"
+ Long.toHexString(newIdent) + " while dispatching to "
+ msg.target.getClass().getName() + " "
+ msg.callback + " what=" + msg.what);
}
msg.recycleUnchecked();
}
}

⑩ 如何使用clang+llvm+binutils+newlib+gdb搭建交叉編譯環境

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++?)

熱點內容
sqlserver連接驅動 發布:2024-05-06 00:33:34 瀏覽:645
存儲開銷 發布:2024-05-06 00:13:38 瀏覽:953
伺服器怎麼盈利 發布:2024-05-05 23:56:16 瀏覽:941
java網站培訓學校 發布:2024-05-05 23:43:11 瀏覽:40
淘寶搜索演算法 發布:2024-05-05 23:37:07 瀏覽:998
sqlwhencasethen 發布:2024-05-05 23:27:51 瀏覽:641
模架編程軟體 發布:2024-05-05 23:26:54 瀏覽:483
存儲過程異常 發布:2024-05-05 23:24:03 瀏覽:399
winxp訪問不了win7 發布:2024-05-05 23:05:23 瀏覽:734
演算法牛 發布:2024-05-05 22:43:40 瀏覽:720