導航:首頁 > 源碼編譯 > 交叉編譯十種報錯

交叉編譯十種報錯

發布時間:2022-05-17 23:33:53

1. linux交叉編譯Qt 失敗

設置環境變數 export QT_DEBUG_PLUGINS=1
重新運行程序
Cannot load library /opt/Qt-5.12.4/plugins/platforms/libqxcb.so2
輸入ldd /opt/Qt-5.12.4/plugins/platforms/libqxcb.so

顯示缺少 libxkbcommon,並展示其路徑。
然後將顯示路徑中的拷貝到需要的目錄中。

2. ubuntu 16 LTS 安裝32交叉編譯工具報錯:cannot execute binary file: Exec format error

1.使用錯誤的命令,如gcc -c hello.c -o hello,這樣得到的是.o文件,而不是可執行程序,此時使用./hello就會報上述錯誤!此時應改用gcc hello.c -o hello就可以啦!
2.如果不是上述錯誤,就可能是版本問題,如本來是32位操作系統,偏偏使用64位軟體,此時需要的就是使用正確的軟體版本!

3. Qt交叉編譯板子上運行的程序時,出現錯誤,求大神解決!!!

  1. 要使用pthread_getattr_np需要在源碼頭部加上#define _GNU_SOURCE

  2. arm-linux-g++ -static -Wl,-O1 -Wl,-rpath,/usr/local/Trolltech/QtEmbedded-4.8.5/lib -o .bin/n329demo-static .obj/main.o .obj/n329win.o .obj/moc_n329win.o -L/usr/local/Trolltech/QtEmbedded-4.8.5/lib -lQtDeclarative -L/usr/local/Trolltech/QtEmbedded-4.8.5/lib -lQtScript -lQtSql -lQtGui -lts -lQtNetwork -lQtCore -lm -ldl -lrt -lpthread
    這個最後的-lpthread修改為-pthread

4. 交叉編譯幾種常見的報錯

(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 {} \;

5. 兄弟我最近剛學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

希望可以幫助到你

6. 交叉編譯curl,但是報錯,提供了openssl,但無法檢測到openssl, 寫的路徑也是交叉編

摘要 這里給出一種解決思路,不一定能解決遇到的問題,可以對應著做一些嘗試,具體問題再具體分析

7. 編譯玩qt交叉編譯環境,進行qt程序開發時make總是報錯

缺少了些文件

可以看到第一句:
/usr/local/arm/2.95.3/arm-linux/bin/ld: cannot find -lqte

應該在交叉編譯器上,你可以用別人做好的arm-linux-gcc編譯鏈。我也弄了好久,前幾天弄好了

8. Qt交叉編譯遇到的問題

QT相關的安裝軟體包:

(1) tmake-1.13.tar.gz (編譯工具,如progen與tmake)

(2) qt-embedded-2.3.7.tar.gz (提供了qte的庫)

(3) qt-x11-2.3.2.tar.gz (為了生成相應的QT工具,如designer和qvfb等)

(4) qtopia-free-1.7.0.tar.gz (QTE的桌面環境程序)

(5) cross-3.3.2.tar.bz2 (交叉編譯工具)

一、安裝工具

1 安裝 tmake

在 Linux 命令模式下運行以下命令:

tar xfz tmake-1.11.tar.gz

export TMAKEDIR=$PWD/tmake-1.11

export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++

export PATH=$TMAKEDIR/bin:$PATH

2 安裝 Qt/Embedded 2.3.7

在 Linux 命令模式下運行以下命令:

tar xfz qt-embedded-2.3.7.tar.gz

cd qt-2.3.7

export QTDIR=$PWD

export QTEDIR=$QTDIR

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

./configure –qconfig local–qvfb -depths 4,8,16,32

make sub-src

cd ..

上述命令 ./configure -qconfig -qvfb -depths 4,8,16,32 指定 Qt 嵌入式開發包生成虛擬緩沖幀工具qvfb,並支持 4,8,16,32 位的顯示顏色深度。另外我們也可以在 configure 的參數中添加-system-jpeg 和 gif,使 Qt/Embedded 平台能支持 jpeg、gif 格式的圖形。

上述命令 make sub-src 指定按精簡方式編譯開發包,也就是說有些 Qt 類未被編譯。Qt 嵌入式開發包有 5種編譯范圍的選項,使用這些選項,可控制 Qt 生成的庫文件的大小,但是您的應用所使用到的一些 Qt 類將可能因此在 Qt 的庫中找不到鏈接。編譯選項的具體用法可運行./configure -help 命令查看。

在這一過程的configure中出現了問題:有一個變數沒有聲明,發現是少了一個頭文件,加上即可,make順利通過,看到了enjoy!

3 安裝 Qt/X11 2.3.2

在 Linux 命令模式下運行以下命令:

tar xfz qt-x11-2.3.2.tar.gz

cd qt-2.3.2

export QTDIR=$PWD

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

./configure -no-opengl

make

make -C tools/qvfb

mv tools/qvfb/qvfb bin

cp bin/uic $QTEDIR/bin

cd ..

根據開發者本身的開發環境,也可以在 configure 的參數中添加別的參數, 比如-no-opengl 或-no-xfs,可以鍵入./configure -help 來獲得一些幫助信息。

在這個安裝過程中也出現了很多錯誤,典型的就是在make過程中:

/usr/local/qt-2.3.2/include/qvaluestack.h:57: error: cannot convert 'QValueListIterator<QMap<QString, QString> >' to 'const char*' for argument '1' to 'int remove(const char*)'

/usr/local/qt-2.3.2/include/qvaluestack.h: In member function 'T QValueStack<T>::pop() [with T = QString]':

xml/qxml.cpp:2502: instantiated from here

/usr/local/qt-2.3.2/include/qvaluestack.h:57: error: cannot convert 'QValueListIterator<QString>' to 'const char*' for argument '1' to 'int remove(const char*)'

make[2]: *** [xml/qxml.o] Error 1

make[2]: Leaving directory `/usr/local/qt-2.3.2/src'

make[1]: *** [sub-src] Error 2

make[1]: Leaving directory `/usr/local/qt-2.3.2'

make: *** [init] Error 2

這個錯誤是說,在文件qvaluestack.h的57行出錯。改正方法是修改文件qt-2.3.2/ include/qvaluestack.h的 第57行,將remove( this->fromLast() );改為 this->remove( this->fromLast() );

修改時可能要更改文件許可權,變成可寫的,chmod 666 qvaluestack.h。然後make順利通過,看到了enjoy。

二、交叉編譯 Qt/Embedded 的庫

開發居於 Qt/Embedded 的應用程序要使用到 Qt/Embedded 的庫,編寫的 Qt 嵌入式應用程序最終是在YLE270開發板上運行的,因此在把 Qt 嵌入式應用程序編譯成支持 YLE270 的目標代碼之前,需要兩樣東西,一個是 arm9 的 linux 編譯器,另一個是經 arm9 的linux 編譯器編譯過的 Qt/Embedded 的庫。安裝交叉編譯工具 cross-3.3.2 前面已經安裝過了。

這一步主要是配置 Qt/Embedded2.3.7 的安裝,Qt/Embedded 的安裝選項有很多個,您可以在命令行下直接輸入「./configure」來運行配置,這時安裝程序會一步一步提示你輸入安裝選項。您也可以在「./configure」後輸入多個安裝選項直接完成安裝的配置。在這些選項中有一個選項決定了編譯 Qt/Embedded 庫的范圍,即可以指定以最小,小,中,大,完全 5 種方式編譯 Qt/Embedded 庫。另外 Qt/Embedded 的安裝選項還允許我們自己定製一個配置文件,來有選擇的編譯 Qt/Embedded 庫,這個安裝選項是「-qconfig local」 ;當我們指定這個選項時,Qt/Embedded庫在安裝過程中會尋找qt-2.3.7/src/tools/qconfig-local.h 這個文件,如找到這個文件,就會以該文件裡面定義的宏,來編譯鏈接 Qt/Embedded 庫。

具體過程如下:

cd qt-2.3.7

export QTDIR=$PWD

export QTEDIR=$QTDIR

make clean

./configure –xplatform linux-arm-g++ -shared –debug (接下行)

-qconfig local -qvfb -depths 4,8,16,32

make

cd ..

在make中出現了錯誤,有變數沒有聲明,原來是優龍公司為了避免初學者在一開始就直接接觸到 Qt/Embedde 的復雜的宏編譯選項,把這些宏定義到一個名為 qconfig-local.h的安裝配置文件中,在安裝 Qt/Embedded 的時候,需要把這個文件復制到 Qt/Embedded 的安裝路徑的/src/tools 子路徑下,

cp /配置文件所在路徑/qconfig-local.h ./src/tools

make順利通過,看到了enjoy。

最後就可以在命令行下輸入make 命令對整個工程進行編譯鏈接了,在這里,要把過程中產生的文件放在同一個文件夾裡面,方便應用。

在最後make完畢以後我還是遇到了一個問題,就是生成的可執行文件不能運行,運行時提示:./hello cannot execute binary file,當然不能直接在自己的主機上運行了,因為生成的二進制文件要下到板子上運行的。接上液晶屏,板子上電,把生成的可執行文件下載到板子上,要chmod一下,不然許可權不夠,終於在液晶屏上看到了自己弄的小程序,好開心!

三、添加一個 Qt/Embedded 應用到 QPE

以hello,world!為例

1 在工作的機器上解包 qtopia

tar zxvf qtopia-free-1.7.x.tar.gz

cd qtopia-free-1.7.x

export QTDIR=$QTEDIR

export QPEDIR=$PWD

export PATH=$QPEDIR/bin:$PATH

注意在上面已經設定環境變數 QPEDIR 為 QPE 的安裝(解包)路徑。

2 建立 Hello,World 的例子程序的圖標文件

方法是:製作一個 32 X 32 大小的 PNG 格式的圖標文件,將該文件存放在$QPEDIR/pics/inline 目錄下,然後使用以下命令將$QPEDIR/pics/inline 目錄下的所有圖形文件轉換成為一個 c 語言的頭文件,這個頭文件包含了該目錄下的圖形文件的 rgb 信息。

qembed --images $QPEDIR/pics/inline/*.*

> $QPEDIR/src/libraries/qtopia/inlinepics_p.h

3 交叉編譯 qtopia

在$QPEDIR 路徑下,運行以下命令

cd src

./configure –platform linux-arm-g++

make

cd ..

在這一過程中也出現了比較大的錯誤,在make的時候又出現了error,是resource.cpp的174行的變數qembed_findImage沒有聲明,考慮到以前遇到的情況,推斷可能是少了某個頭文件,但是又不知道是哪一個,google了很久都沒有找到解決辦法,沒辦法只好點開src/libraries/qtopia下面的每一個頭文件看了一遍,還是沒有發現有含有這個變數的文件,繼續google,然後發現了inlinepics_p.h中包含qembed_findImage,於是vi /usr/local/qtopia-free-1.7.0/src/libraries/qtopia/inlinepics_p.h,發現inlinepics_p.h是空白的,原來是

qembed --images $QPEDIR/pics/inline/*.*

> $QPEDIR/src/libraries/qtopia/inlinepics_p.h

出了錯誤,重新操作一遍這一步,再查看inlinepics_p.h,發現正常了,要繼續交叉編譯qtopia:

make clean

./configure –platform linux-arm-g++

9. 求助: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;
}

閱讀全文

與交叉編譯十種報錯相關的資料

熱點內容
汽車小壓縮機拆解 瀏覽:825
雲桌面卡是因為伺服器的原因嗎 瀏覽:377
qd123壓縮機 瀏覽:969
pn532讀取加密門禁卡 瀏覽:85
win10文件夾屬性里無法加密 瀏覽:34
比特幣加密的條件 瀏覽:848
求購現成影視app源碼 瀏覽:572
wdsecurity加密版 瀏覽:813
雲伺服器和雲豐雲 瀏覽:188
伺服器如何設置獨立ip 瀏覽:857
tar命令打包文件夾 瀏覽:1000
刪除linux用戶和組 瀏覽:548
小米的程序員都用什麼筆記本 瀏覽:703
位元組三面演算法題 瀏覽:971
伺服器保護有什麼好處 瀏覽:894
全部下載完後進行統一解壓 瀏覽:393
遠嫁的程序員媽媽 瀏覽:555
1024程序員節安全攻防挑戰賽 瀏覽:786
怎麼解除txt加密 瀏覽:772
javahttp流 瀏覽:656