❶ 海思3516DV300搭建交叉編譯環境問題記錄
剛開始搭建海思交叉編譯環境的時候遇到問題:
安裝完arm-himix200-linux後,輸入arm-himix200-linux -v,會出現如下錯誤:
xxx@xxx-virtual-machine:~/Downloads/study3516DV300/rp-hi3516dv300-busybox/sample/hifb$ arm-himix200-linux-gcc -v
arm-himix200-linux-gcc: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
錯誤方法:
export LC_CTYPE=C.UTF-8
這樣做的話,arm-himix200-linux-gcc -v會顯示成功,但是當去編譯sample時候,會出現這個錯誤
collect2: fatal error: /opt/hisi-linux/x86-arm/arm-himix200-linux/host_bin/../lib/gcc/arm-linux-gnueabi/6.3.0/../../../../arm-linux-gnueabi/bin/nm terminated with signal 6 [Aborted], core mped
解決方案:
vi ~/.bashrc
最後加入這兩句,完成後保存
export LC_ALL=C
export PATH="/opt/hisi-linux/x86-arm/arm-himix100-linux/bin:$PATH"
編輯之後使環境變數生效的命令:source ~/.bashrc
之後編譯sample通過,生成sample_hifb文件。
❷ C++編譯失敗報錯很奇怪,沒說錯誤在哪兒,怎麼解決源代碼和報錯信息如下。
這個是linux下面的c++編譯對嗎,它跟掛載屬性inode64有關系。比較老的交叉編譯器,只支持32位inode的文件訪問,當遇到超過4294967295的文件,就會編譯出錯並提示:Value too large for defined data type。
那麼解決方案就有兩種:
Ø 升級交叉編譯器版本,讓其支持inode64的源文件。
Ø 交叉編譯器版本不變,將文件系統掛載屬性從inode64改為inode32。
❸ 交叉編譯幾種常見的報錯
(1)交叉編譯器
在主機上用來編譯其它類型機器上可執行代碼的編譯器就叫交叉編譯器,我們進行嵌入式linux的開發主機大部分都是X86,而我們的嵌入式系統的處理器有可能是ARM/MIPS等非X86處理器,這時候就必須使用ARM/MIPS的交叉編譯器才能編譯出在這些處理器上能夠執行的代碼。這里我們使用的是ARM最新的EABI編譯器。
交叉編譯器在編譯的時候,對於浮點運行會預設硬浮點運算FPA(float point architecture),而沒有FPA的CPU,比如三星的2440等,會使用FPE(float point emulation即軟浮點),這樣在速度上就會受到極大限制。使用EABI(embeded application binary interface)則可以對此改善處理。
(2)不修改MAKEFILE來建立編譯環境
將arm-2008q3.tar.bz2拷貝到ubuntu系統的某個目錄,解壓後。使用VI編輯/etc/bash.bashrc,在文件最後加入環境變數設置(註:加bin的含義是交叉編譯器工具目錄):
保存後,用source運行一次該文件,就可以了。
(3)gcc: error trying to exec 'cc1': execvp: No such file or directory 的解決
今天在編譯開發板環境時,明明設置好編譯器的環境變數了,編譯時就是會出現:gcc: error trying to exec 'cc1': execvp: No such file or directory 錯誤提示。後來發現一個方法可以解決,輸入:whereis gcc,就可以了發現好幾個gcc,包括/usr/bin/gcc,所以我就把PATH路徑設過去,就OK了。
(4)Clock skew detected. Your build may be incomplete
如果你裝了Windows Linux雙系統,系統時間很可能出問題,從而造成文件修改時間比系統時間晚,兩種辦法:
1,應該是你的PC的系統時鍾錯誤,在BIOS中修改正確。
2,使用touch命令將所有文件的時間戳修改為你系統的當前時間。解決方法:find ./-name "*" -exec touch {} \;
❹ 交叉編譯時提示 對'__C_ctype_b'的未定義引用
出現這種情況的原因,主要是C/C++編譯為obj文件的時候並不旅賣需要函數的具體實現,只要有函數的原型即可。但是在鏈接為可執行文件的時候就必須要具體的實現了。如果錯誤是未聲明的引用,那就是找不到函數的原型,解決辦法這里就不細致說了,通常是相關的頭文件未包含。
解決辦法
指定原因就好辦了,既然知道是缺少了函數的喊昌具體實現,那麼就給它這個函數的實現就好了。比如上面的例子,是因為缺失了dlopen、dlsym、dlerror、dlclose這些函數的實現,這幾個函數是用於載入動態鏈接庫的,編譯的時候需要添加-ldl來使用dl庫(這是靜態庫,在系統目錄下/usr/lib/i386-linux-gnu/libdl.a、/usr/lib/x86_64-linux-gnu/libdl.a)。
但是看上面編譯的時候是有添加-ldl選項的,那麼為什麼不行呢?
gcc 依賴順序問題
這個主要的原因是gcc編譯的時候,各個文件依賴順序的問題。
在gcc編譯的時候,如果文件a依賴於文件b,那麼編譯的時候必須把a放前面,b放後面。
例如:在main.c中使用了pthread庫相關函數,那麼編譯的時候必須是main.c在前,-lpthread在後。gcc main.c -lpthread -o a.out。
上面拆滲逗出現問題的原因就是引入庫的順序在前面了,將其放置在後面即可了。
g++ -o spider bloomfilter.o confparser.o crc32.o dso.o hashs.o md5.o qstring.o sha1.o socket.o spider.o threads.o url.o -rdynamic -lpthread -levent -lcrypt -ldl
❺ ubuntu系統系交叉編譯出現command not found錯誤,謝謝
1、核實 mips-openwrt-linux-uclibc-gcc 是否有執行許可權
chmod +x mips-openwrt-linux-uclibc-gcc
2、核實 mips-openwrt-linux-uclibc-gcc 是否為快捷鏈接,
1)其鏈接的gcc是否有執行許可權
2)其鏈接是否在正確的位置
3、核實PATH路勁是否添加正確(相信樓主是加正確了的)
根據樓主截圖,這個環境變數是有的,一般應該檢查1、2點
❻ 求助:mplayer交叉編譯時遇到的錯誤
交叉編譯mplayer的時候出現這樣的錯誤arm1176jzf-s+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/include/stdio.h:36,
from mplayer.c:5:
./libavutil/bswap.h:42:34: error: expected identifier or '(' before '__extension__'
static av_always_inline uint16_t bswap_16(uint16_t x)
^
./libavutil/bswap.h:57:34: error: expected identifier or '(' before '__extension__'
static av_always_inline uint32_t bswap_32(uint32_t x)
^
./libavutil/bswap.h:99:24: error: expected identifier or '(' before '__extension__'
static inline uint64_t bswap_64(uint64_t x)
^
mplayer.c: In function 'main': 錯誤處代碼 static av_always_inline uint16_t bswap_16(uint16_t x)
//static inline uint16_t bswap_16(uint16_t x)
{
#if defined(ARCH_X86)
__asm("rorw $8, %0" :
LEGACY_REGS (x) :
"0" (x));
#elif defined(ARCH_SH4)
__asm__("swap.b %0,%0":"=r"(x):"0"(x));
#else
x= (x>>8) | (x<<8);
#endif
return x;
}
❼ 兄弟我最近剛學QT,到了交叉編譯這一塊,make之後老是出現 下面的錯誤
交叉編譯的時候要加上配置要加上:-embedded arm
例如:
./configure \
-no-pch \
-no-dbus \
-no-nas-sound \
-no-opengl \
-no-sm \
-no-xshape \
-no-xinerama \
-no-xcursor \
-no-xfixes \
-no-xrandr \
-no-xrender \
-no-fontconfig \
-no-xkb \
-no-glib \
-little-endian \
-no-mmx -no-3dnow -no-sse -no-sse2 \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-qconfig smal
希望可以幫助到你