當前位置:首頁 » 編程軟體 » freebsd如何交叉編譯

freebsd如何交叉編譯

發布時間: 2023-03-18 14:45:13

1. 當程序不能編譯時怎麼辦調試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 庫中某個功能的程序失敗而導致無法找到那個庫。在這種情況下,只需要解決第一個問題,第二個問題也就不會再出現了。
一種情況是測試程序設計不正確而可能

2. LINUX交叉編譯工具鏈和GCC是什麼關系啊

編譯工具鏈一般最簡化的為
binutils
+
gcc
+
glibc
+
kernel-header
組合的環境。
GCC
就是編譯器,他的輸出每次安裝只能有針對一個架構的指令輸出。如果要多個架構輸出,那就要裝多個
GCC
,所以編譯工具鏈裡面會有一個
GCC

交叉編譯就是跨架構編譯,編譯出來的程序不能在本機執行(當然有例外情況)。所以這個時候就需要交叉編譯工具鏈。
工具鏈光有
GCC
是不行的,還需要一個
binutils
的二進制連接器,以及一個最基本的目標架構的
C
庫,C
庫還需要一個目標架構的內核源代碼才能完全工作(當然不是必須的,但編譯有的時候需要)
又因為
GCC
、binutils
不能實現單軟體同時多架構輸出,所以需要單獨另裝,又加上
C
庫和內核頭文件需要目標架構的東西而不能用本機本地架構的數據。
所以一個交叉編譯工具鏈就是針對目標架構准備的單獨安裝單獨使用的
binutils
+
gcc
+
glibc
+
kernel-header
的集合了。
PS:這個
kernel-header
並不一定就是
Linux
,他還可以是別的系統核心開發庫,比如
FreeBSD

3. 什麼是嵌入式設計中的交叉編譯

Compiling a program takes place by running a compiler on the build platform. The compiled program will run on the host platform. Usually these two are the same; if they are different, the process is called cross-compilation.
對一個程序進行編譯的過程要通過在一個操作系統平台(編譯平台)上運行編譯器而完成。被編譯的程序也將運行在一個操作系統平台(運行平台)上,這二個平台通常是相同的,如果二者不同,則這個編譯過程被稱為交叉編譯。

Typically the hardware architecture differs, like for example when compiling a program destined for the MIPS architecture on an x86 computer; but cross-compilation is also applicable when only the operating system environment differs, as when compiling a FreeBSD program under Linux; or even just the system library, as when compiling programs with uClibc on a glibc host.
一般來說交叉編譯被應用在硬體結構不同的機器上,如在x86的計算機上為MIPS體系的機器編譯程序。但交叉編譯也適用於硬體結構相同而操作系統不同的情況,比如在Linux操作系統下為FreeBSD編譯程序。交叉編譯甚至也可以應用於只有系統庫不同的情況下,如在使用glibc的機器上用uClibc編譯程序。

Cross-compilation is typically more involved and prone to errors than with native compilation. Due to this, cross-compiling is normally only utilized if the target is not yet self-hosting (i.e. able to compile programs on its own), unstable, or the build system is simply much faster. For many embedded systems, cross-compilation is simply the only possible way to build programs, as the target hardware does not have the resources or capabilities.
交叉編譯通常比本地編譯更容易引發錯誤。因此,交叉編譯一般只用於目標平台不能自洽(比如說,目標平台無法完成程序編譯),不穩定或者編譯平台速度更快的情況下。對大多數嵌入式系統來說,由於目標平台的執行能力或系統資源有限,交叉編譯是唯一可行的編譯方式。

4. 如何在freebsd下交叉編譯arm-linux

1. 下載源文件、補丁和建立編譯的目錄 2. 建立內核頭文件 3. 建立二進制工具(binutils) 4. 建立初始編譯器(bootstrap gcc) 5. 建立c庫(glibc) 6. 建立全套編譯器(full gcc)

5. 求FreeBSD的教程

FreeBSD連載(94):基於NAT的負載均衡技術 (王波 2月3日 17:06)
FreeBSD連載(93):反向代理負載均衡 (王波 2月3日 02:26)
FreeBSD連載(92):基於DNS的負載均衡 (王波 2月2日 01:04)
FreeBSD連載(91):提升靜態網頁服務能力的綜合方式 (王波 2月1日 13:24)
FreeBSD連載(90):單伺服器性能調整 (王波 1月31日 13:22)
FreeBSD連載(89):CGI和SSI的安全性 (王波 1月30日 16:17)
FreeBSD連載(88):安全連接方式SSL (王波 1月29日 00:38)
FreeBSD連載(87):基於用戶的訪問控制 (王波 1月28日 17:07)
FreeBSD連載(86):對IP地址和域名的控制 (王波 1月27日 14:59)
FreeBSD連載(85):配置Apache伺服器(2) (王波 1月26日 15:03)
FreeBSD連載(84):配置Apache伺服器(1) (王波 1月25日 13:29)
FreeBSD連載(83):Apache基本安裝 (王波 1月24日 14:29)
FreeBSD連載(82):數據處理方式 (王波 1月23日 01:55)
FreeBSD連載(81):超文本傳輸協議HTTP (王波 1月22日 18:15)
FreeBSD連載(80):構建防火牆 (王波 1月21日 13:06)
FreeBSD連載(79):設置和使用ipfilter (王波 1月20日 15:30)
FreeBSD連載(78):設置和使用ipfw/natd (王波 1月19日 18:03)
FreeBSD連載(77):安全工具 (王波 1月18日 13:28)
FreeBSD連載(76):設置基本系統 (王波 1月17日 13:00)
FreeBSD連載(75):防火牆技術 (王波 1月16日 15:26)
FreeBSD連載(74):安全問題 (王波 1月15日 14:21)
FreeBSD連載(73):認證與加密 (王波 1月14日 13:25)
FreeBSD連載(72):設置和使用DHCP (王波 1月13日 15:16)
FreeBSD連載(71):DHCP的工作過程 (王波 1月12日 14:45)
FreeBSD連載(70):用SharityLight裝SMB文件系統 (王波 1月11日 17:03)
FreeBSD連載(69):使用smbclient訪問Windows資源 (王波 1月10日 14:29)
FreeBSD連載(68):根據Windows網路設置Samba (王波 1月9日 18:26)
FreeBSD連載(67):配置samba (王波 1月8日 17:02)
FreeBSD連載(66):安裝samba (王波 1月7日 13:42)
FreeBSD連載(65):SMB/CIFS協議 (王波 1月6日 13:05)
FreeBSD連載(64):NetBIOS名字解析 (王波 1月6日 11:41)
FreeBSD連載(63):集成Unix和Windows的方式 (王波 1月4日 19:35)
FreeBSD連載(62):升級系統 (王波 1月3日 13:55)
FreeBSD連載(61):其他內核設置選項 (王波 1月3日 13:39)
FreeBSD連載(60):預設內核配置選項 (王波 1月3日 11:23)
FreeBSD連載(59):編譯安裝新內核 (王波 12月31日 16:36)
FreeBSD連載(58):為編譯內核准備源代碼 (王波 12月30日 15:44)
FreeBSD連載(57):可執行程序格式 (王波 12月29日 15:01)
FreeBSD連載(56):手工編譯安裝程序 (王波 12月28日 11:11)
FreeBSD連載(55):Ports Collection (王波 12月27日 16:23)
FreeBSD連載(54):配置文件XF86Config (王波 12月26日 16:09)
FreeBSD連載(53):中文X伺服器 (王波 12月25日 12:50)
FreeBSD連載(52):外掛式中文顯示與輸入軟體 (王波 12月24日 15:52)
FreeBSD連載(51):中文X應用軟體 (王波 12月23日 13:49)
FreeBSD連載(50):定製X Window的基本方法 (王波 12月22日 13:45)
FreeBSD連載(49):進入X Window (王波 12月21日 16:20)
FreeBSD連載(48):X Window的基本概念 (王波 12月21日 15:56)
FreeBSD連載(47):使用xf86config配置X伺服器 (王波 12月19日 17:59)
FreeBSD連載(46):使用XF86Setup配置X伺服器 (王波 12月19日 17:46)
FreeBSD連載(45):安裝XFree86 (王波 12月17日 18:23)
FreeBSD連載(44):X Free86的硬體要求 (王波 12月16日 13:34)
FreeBSD連載(43):NFS伺服器 (王波 12月15日 18:57)
FreeBSD連載(42):NFS客戶支持 (王波 12月14日 14:09)
FreeBSD連載(41):在FreeBSD上查看郵件 (王波 12月14日 13:50)
FreeBSD連載(40):郵件伺服器 (王波 12月12日 18:59)
FreeBSD連載(39):定義自己的名字服務 (王波 12月11日 15:02)
FreeBSD連載(38):配置緩沖或轉發方式的named (王波 12月10日 11:40)
FreeBSD連載(37):DNS的體系結構 (王波 12月9日 14:20)
FreeBSD連載(36):PPP協議 (王波 12月8日 13:09)
FreeBSD連載(35):串口和modem (王波 12月7日 11:30)
FreeBSD連載(34):手工配置網路 (王波 12月6日 11:44)
FreeBSD連載(33):DOD參考模型 (王波 12月5日 18:11)
FreeBSD連載(32):系統備份 (王波 12月5日 17:50)
FreeBSD連載(31):系統日誌 (王波 12月3日 17:11)
FreeBSD連載(30):配置列印機 (王波 12月2日 23:09)
FreeBSD連載(29):列印機配置:系統結構 (王波 12月2日 00:52)
FreeBSD連載(28):Packages Collection (王波 11月30日 17:05)
FreeBSD連載(27):應用軟體的類別 (王波 11月29日 12:23)
FreeBSD連載(26):進程的許可權 (王波 11月28日 18:31)
FreeBSD連載(25):定時執行程序 (王波 11月28日 18:17)
FreeBSD連載(24):查看系統狀態 (王波 11月26日 16:10)
FreeBSD連載(23):配置系統時間 (王波 11月25日 12:44)
FreeBSD連載(22):調整控制台設置 (王波 11月24日 17:43)
FreeBSD連載(21):管理交換設備 (王波 11月23日 13:03)
FreeBSD連載(20):建立文件系統 (王波 11月22日 15:30)
FreeBSD連載(19):檢查硬碟調整文件系統的目錄結構 (王波 11月21日 18:29)
FreeBSD連載(18):軟盤操作 (王波 11月21日 17:24)
FreeBSD連載(17):安裝文件系統 (王波 11月19日 16:00)
FreeBSD連載(16):設備文件 (王波 11月18日 16:37)
FreeBSD連載(15):文件的屬性 (王波 11月17日 19:49)
FreeBSD連載(14):shell設置 (王波 11月16日 15:04)
FreeBSD連載(13):超級用戶root、登錄類別 (王波 11月15日 19:16)
FreeBSD連載(12):用戶管理-增加用戶 (王波 11月14日 17:20)
FreeBSD連載(11):系統登錄與退出 (王波 11月13日 04:20)
FreeBSD連載(10):系統啟動腳本 (王波 11月12日 13:20)
FreeBSD連載(09):系統啟動過程 (王波 11月11日 16:03)
FreeBSD連載(08):其他安裝問題 (王波 11月10日 20:57)
FreeBSD連載(07):基本系統配置 (王波 11月9日 18:11)
FreeBSD連載(06):安裝FreeBSD ( 11月8日 16:29)
FreeBSD連載(05):安裝之前的准備 (王波 11月7日 18:20)
FreeBSD連載(04):FreeBSD的相關資源 (王波 11月6日 02:09)
FreeBSD連載(03):其他相關系統和組織 (王波 11月5日 14:46)
FreeBSD連載(02):FreeBSD的功能特點 (王波 11月4日 18:28)
FreeBSD連載(01):FreeBSD的起源 (王波 11月3日 17:19)
FreeBSD連載:FreeBSD使用大全目錄 (王波 11月3日 03:58)
FreeBSD連載:作者自序 (王波 11月3日 03:14)

http://tech.sina.com.cn/focus/FreeBSD/index.shtml

6. 如何在android上支持jna <二>實戰步驟

1) 首先 JNA存在形式只是一個jna.jar 結構為java class + platform native
lib(libjnidispatch.so),現在支持的平台有win32 x86/amd64/mac, linux x86/bsd, sun os
等等,java層應該是通用,無需做改動。所以文章就做在怎樣得到android平台辨認的native .so 上。

2) 確定思路,搭建jna/native arm交叉編譯環境,得到android自己的jna.jar.

3) 源碼下載,開源項目非常方便

$ svn co https //jna dev java net/svn/jna/trunk/jnalib

4) 選擇編譯器,考慮到jna是gnu項目,而且所有eabi編譯器都兼容,所以選擇arm-linux-none-gnueabi-gcc.

5) 進入源碼樹,

$ cd jnalib

6) 設置環境變數。java, gcc, ant等。

$ export
PATH=/opt/ant/bin:/opt/jdk1.6.0_11/bin:/opt/arm-none-linux-gnueabi/bin:/opt/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin:$PATH

$ export JAVA_HOME=/usr/java/jdk1.6.0_21/

7) 更改build.xml,native/makefile來支持arm平台。(比較長,可略過不看)

ndex:
native/Makefile
===================================================================
---
native/Makefile (revision 1146)
+++ native/Makefile (working
)
@@ -54,8 +54,8
@@
LIBSFX=.so
ARSFX=.a
JNISFX=$(LIBSFX)
-CC=gcc
-LD=gcc
+CC=arm-none-linux-gnueabi-gcc
+LD=arm-none-linux-gnueabi-gcc
LIBS=
#
Default to Sun recommendations for JNI compilation
COPT=-O2
-fno-omit-frame-pointer -fno-strict-aliasing
@@ -126,10 +126,12
@@
endif

ifeq ($(OS),linux)
-ARCH=$(shell uname -m | sed
's/i.86/i386/g')
+ARCH=arm #$(shell uname -m | sed
's/i.86/i386/g')
PCFLAGS+=-fPIC
CDEFINES+=-DHAVE_PROTECTION
LDFLAGS+=-Wl,-soname,$@
+FFI_CONFIG
+=
--host=arm-none-linux-gnueabi
+CINCLUDES+=-I/usr/include
endif

ifeq
($(OS),freebsd)
Index:
build.xml
===================================================================
---
build.xml (revision 1146)
+++ build.xml (working )
@@ -92,6
+92,7 @@
<os arch="ppc64"/>
<os
arch="sparcv9"/>
<os arch="amd64"/>
+ <os
arch="arm"/>
</or>
</condition>

<condition property="ld.preload" value="LD_PRELOAD_64"
else="LD_PRELOAD">
@@ -110,6 +111,9 @@
<condition
property="jre.arch" value="i386">
<equals arg1="x86"
arg2="${os.arch}"/>
</condition>
+ <condition
property="jre.arch" value="arm">
+ <equals arg1="arm"
arg2="${os.arch}"/>
+ </condition>
<condition
property="jre.arch" value="amd64">
<equals arg1="x86_64"
arg2="${os.arch}"/>
</condition>
@@ -285,6 +289,7 @@

< file="${dist}/out-of-date.jar" tofile="${dist}/win32-x86.jar"
overwrite="true"/>
< file="${dist}/out-of-date.jar"
tofile="${dist}/win32-amd64.jar" overwrite="true"/>
<
file="${dist}/out-of-date.jar" tofile="${dist}/linux-i386.jar"
overwrite="true"/>
+ < file="${dist}/out-of-date.jar"
tofile="${dist}/android.jar" overwrite="true"/>
<
file="${dist}/out-of-date.jar" tofile="${dist}/linux-amd64.jar"
overwrite="true"/>
< file="${dist}/out-of-date.jar"
tofile="${dist}/linux-ia64.jar" overwrite="true"/>
<
file="${dist}/out-of-date.jar" tofile="${dist}/freebsd-i386.jar"
overwrite="true"/>
@@ -598,6 +603,9 @@
<zipfileset
src="${dist}/linux-i386.jar"

includes="*jnidispatch*"

prefix="com/sun/jna/linux-i386"/>
+ <zipfileset
src="${dist}/arm-none-linux.jar"
+
includes="*jnidispatch*"
+
prefix="com/sun/jna/android"/>
<zipfileset
src="${dist}/linux-amd64.jar"

includes="*jnidispatch*"

prefix="com/sun/jna/linux-amd64"/>

8) 編譯

$ ant -Djre.arch=arm -Dos.arch=arm -Dos.prefix=linux-arm

9)編譯完成,你就可以在build下等到arm編譯器編出來的jna.jar了, 如果你用eclipse,就可以直接Project...->add
Jar 使用它了。有可能(還不確定), android不支持在jar包中加本地native .so 的做法,你可以將jna.jar分拆開將java
class還以Jar的方式載入,而把linux-arm/下的libjnidispatch.so以add Lib..的方法加入,你可以嘗試一下。
轉載五品員外郎

熱點內容
php辦公系統 發布:2025-07-19 03:06:35 瀏覽:900
奧德賽買什麼配置出去改裝 發布:2025-07-19 02:53:18 瀏覽:42
請與網路管理員聯系請求訪問許可權 發布:2025-07-19 02:37:34 瀏覽:189
ipad上b站緩存視頻怎麼下載 發布:2025-07-19 02:32:17 瀏覽:844
phpcgi與phpfpm 發布:2025-07-19 02:05:19 瀏覽:527
捷達方向機安全登錄密碼是多少 發布:2025-07-19 00:57:37 瀏覽:693
夜魔迅雷下載ftp 發布:2025-07-19 00:39:29 瀏覽:99
增值稅票安全接入伺服器地址 發布:2025-07-19 00:20:45 瀏覽:486
solidworkspcb伺服器地址 發布:2025-07-18 22:50:35 瀏覽:823
怎麼在堆疊交換機里配置vlan 發布:2025-07-18 22:42:35 瀏覽:630