移植capwap到tiny6410上

2021-06-27 12:15:20 字數 2567 閱讀 9942

make的時候用的交叉編譯環境是arm-linux-gcc-4.5.1

make的時候出現gnu_getopt.o: relocations in generic elf (em: 3)錯誤提示。

原因:

由於這個capwap工程之前使用gcc編譯過x86版本的,然後修改configure 的編譯選項開始編譯arm-linux版本,會造成有x86的檔案遺留,使用make clean -w清理後再交叉編譯即可。

。#error "this openssl-devel package does not work your architecture

依賴的庫沒有經過交叉編譯就拿來用了,如#error「./static/libssl.a: could not read symbols: file in wrong format」即libssl.a庫檔案格式是x86架構下的不支援arm架構。

解決:修改openssl-1.0.1j裡的make檔案的cc改為arm-linux-gcc-4.5.1重新編譯,編好後會在penssl-1.0.1j目錄下生產capwap裡的static檔案裡需要的兩個靜態庫檔案:libcrypto.a   libssl.a

2023年12月20日 09:54供稿中心: 網際網路運營部

摘要:嵌入式linux應用程式移植方法總結

嵌入式linux應用程式移植的步驟包括:

1、準備好交叉編譯環境

在安裝有linux作業系統的pc上安裝對於平台的交叉編譯器,並將交叉編譯器加到環境變數中,如export path=$path:/opt /toolchain/rsdk-1.3.6-5281-eb-2.6.30-0.9.30/bin, 然後在終端介面裡看交叉編譯器版本,如敲mips-linux-gcc –v,顯示版本號則表示安裝成功。

2、準備好源**

準備好需要編譯的源**庫包,如capwap-0.93.3,需要注意的是,不僅需要準備要編譯的源**庫包,還需要準備該原始碼包依賴的包,例如capwap-0.93.3依賴安全加密相關的包openssl和多執行緒相關的包pthread,這些包也需通過編譯成靜態庫或動態庫供主承銷包呼叫。

3、修改makefile

一般的原始碼庫可以通過執行./configure來制定編譯器gcc,目標板的架構已經生產應用程式和庫的目錄。如果沒有configure檔案就需要手動開啟makefile檔案來修改,主要需要修改的地方有:(1)編譯器的型別,(2)需要庫的標頭檔案路徑;(3)需要庫的鏈結路徑(4)生成應用程式的路徑。如opencapwap移植過程,將cc=gcc行用cc=mips-linux-gcc替換。

4、編譯源**

在原始碼包的主路徑下執行make,除非運氣特別好,一般情況下是會報錯的,需要根據報錯的型別進行相應的修改。常見的報錯型別有:(1)依賴的庫包不支援該cpu架構,需要更換該架構的庫包,如capwap自帶的openssl庫不支援 mips。#error "this openssl-devel package does not work your architecture?"(2)依賴的庫沒有經過交叉編譯就拿來用了,如#error「./static/libssl.a: could not read symbols: file in wrong format」即libssl.a庫檔案格式是x86架構下的不支援mips架構。(3)源**中有c語言方面的錯誤,一般是和交叉編譯器版本不匹配引起的。

一步步解決完這些錯誤後,然後終於可以生產對應目標板的應用程式了。但是生產相應的應用程式才是萬里長征的第一步,讓程式正確的執行才是最終目標。

5、安裝應用程式

6、執行除錯應用程式

除錯應用程式讓其能夠正確的工作,才是移植工作最重要的部分,這需要對應用程式的流程很熟悉,然後通過列印日誌的方法看程式執行的路徑,分析日誌與正確的流程的差異來確定出錯的地方。常見的出錯地方有:(1)記憶體分配函式;(2)系統位數不一樣;(3)位元組順序問題(大端小端);(4)浮點數的表示問題等。如我們在移植過程中遇到的malloc函式行為不同的問題。以上都是平時移植過程中需要重點注意的地方。

移植中文字庫到tiny6410

參考 在main.c中新增 qtextcodec setcodecforlocale qtextcodec codecforname utf 8 qtextcodec setcodecfortr qtextcodec codecforname utf 8 qtextcodec setcodecfor...

32位程式移植到64位需要考慮的問題

翻譯自 概述 從32位到64位,根本性的區別在於兩種資料型別發生了變化 long和pointer。在32位環境下,顧名思義,兩者長度都是32位,也就是4個位元組 而在64位環境下,都是8個位元組。所以,當你把pointer或者long型資料賦給int型時,會發生資料截斷 data truncatio...

將 Linux 應用程式移植到 64 位系統上 2

從 32 位系統移植到 64 位系統 本節介紹如何解決一些常見的問題 宣告要想讓您的 在 32 位和 64 位系統上都可以工作,請注意以下有關宣告的用法 表示式在 c c 中,表示式是基於結合律 操作符的優先順序和一組數學計算規則的。要想讓表示式在 32 位和 64 位系統上都可以正確工作,請注意以...