當前位置:首頁 » 編程軟體 » 交叉編譯去掉warning

交叉編譯去掉warning

發布時間: 2022-05-30 13:28:49

1. 請問什麼是交叉編譯跟本地編譯有什麼區別拜託各位大神

你那個代碼很可能是在pc平台上交叉編譯到arm設備上的。這樣你可以在pc上修改程序,然後pc上編譯,最後把編譯的結果下載到arm中就可以運行了。不知道你說的本地編譯是什麼意思,通常所說的那種本地編譯就是編譯的結果還是在pc上運行,如果你期望的是這個的話,可以考慮修改一下編譯器的參數,查一下gcc的說明就知道哪個參數是指定交叉編譯平台的,把那個參數去掉就是本地編譯了。但是,需要注意的是,這樣多半不能成功運行,因為交叉編譯到arm上的一般是基於某種特殊的linux平台的,即使你使用了linux平台,其中可能有一些函數也會不同的。。。

2. 安裝好了交叉編譯環境, 編譯minigui程序時, 報錯. 怎麼辦

提示是未定義的引用, 你先檢查 In file included from /usr/local/include/minigui/endianrw.h:357,
from /usr/local/include/minigui/gdi.h:5353,
from taskbar.c:37:
/usr/include/asm/byteorder.h:6:2: warning: #warning using private kernel header; include <endian.h> instead!
這幾個頭文件問題,告訴你多少行了。查查看。 交叉編譯注意編譯器,頭文件,路徑等環境的設置。 如果還不能解決,請到minigui 的官方網站瀏覽一下。

3. 交叉編譯libnpg庫 ./configure CC=mipsisa32-elf-gcc --host=mipsisa32-linux 求大神給予幫助

編譯安裝。關鍵要看configure後,屏幕上出現的那一堆內容的最末尾有沒有error:
沒有就可以進行下一步。至於其他的,例如warning,可以忽略。
make和make install也是一樣

4. Qt creator交叉編譯帶圖片的程序出現問題,版本4.7

找不到 libQtGui.so 這個庫, 添加環境變數 LIBRARY_PATH=/opt/Qt4.7/lib 試試
另外你使是用 arm-linux-gcc 編譯程序, 需要保證 QT 下的 libQtGui.so 庫也是用 arm-linux-gcc 編譯的, 否則編譯鏈接會出問題

5. 在ubantu12.04版本環境下,使用交叉編譯工具編譯opencv,老出現這個問題,求大神指教!

整個項目的結構圖:

編寫DetectFaceDemo.java,代碼如下:

[java] view
plainprint?

package com.njupt.zhb.test;

import org.opencv.core.Core;

import org.opencv.core.Mat;

import org.opencv.core.MatOfRect;

import org.opencv.core.Point;

import org.opencv.core.Rect;

import org.opencv.core.Scalar;

import org.opencv.highgui.Highgui;

import org.opencv.objdetect.CascadeClassifier;

//

// Detects faces in an image, draws boxes around them, and writes the results

// to "faceDetection.png".

//

public class DetectFaceDemo {

public void run() {

System.out.println("\nRunning DetectFaceDemo");

System.out.println(getClass().getResource("lbpcascade_frontalface.xml").getPath());

// Create a face detector from the cascade file in the resources

// directory.

//CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml").getPath());

//Mat image = Highgui.imread(getClass().getResource("lena.png").getPath());

//注意:源程序的路徑會多列印一個『/』,因此總是出現如下錯誤

/*

* Detected 0 faces Writing faceDetection.png libpng warning: Image

* width is zero in IHDR libpng warning: Image height is zero in IHDR

* libpng error: Invalid IHDR data

*/

//因此,我們將第一個字元去掉

String xmlfilePath=getClass().getResource("lbpcascade_frontalface.xml").getPath().substring(1);

CascadeClassifier faceDetector = new CascadeClassifier(xmlfilePath);

Mat image = Highgui.imread(getClass().getResource("we.jpg").getPath().substring(1));

// Detect faces in the image.

// MatOfRect is a special container class for Rect.

MatOfRect faceDetections = new MatOfRect();

faceDetector.detectMultiScale(image, faceDetections);

System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));

// Draw a bounding box around each face.

for (Rect rect : faceDetections.toArray()) {

Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));

}

// Save the visualized detection.

String filename = "faceDetection.png";

System.out.println(String.format("Writing %s", filename));

Highgui.imwrite(filename, image);

}

}
package com.njupt.zhb.test;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;

//
// Detects faces in an image, draws boxes around them, and writes the results
// to "faceDetection.png".
//
public class DetectFaceDemo {
public void run() {
System.out.println("\nRunning DetectFaceDemo");
System.out.println(getClass().getResource("lbpcascade_frontalface.xml").getPath());
// Create a face detector from the cascade file in the resources
// directory.
//CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml").getPath());
//Mat image = Highgui.imread(getClass().getResource("lena.png").getPath());
//注意:源程序的路徑會多列印一個『/』,因此總是出現如下錯誤
/*
* Detected 0 faces Writing faceDetection.png libpng warning: Image
* width is zero in IHDR libpng warning: Image height is zero in IHDR
* libpng error: Invalid IHDR data
*/
//因此,我們將第一個字元去掉
String xmlfilePath=getClass().getResource("lbpcascade_frontalface.xml").getPath().substring(1);
CascadeClassifier faceDetector = new CascadeClassifier(xmlfilePath);
Mat image = Highgui.imread(getClass().getResource("we.jpg").getPath().substring(1));
// Detect faces in the image.
// MatOfRect is a special container class for Rect.
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);

System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));

// Draw a bounding box around each face.
for (Rect rect : faceDetections.toArray()) {
Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));
}

// Save the visualized detection.
String filename = "faceDetection.png";
System.out.println(String.format("Writing %s", filename));
Highgui.imwrite(filename, image);
}
}

3.編寫測試類:

[java] view
plainprint?

package com.njupt.zhb.test;

public class TestMain {

public static void main(String[] args) {

System.out.println("Hello, OpenCV");

// Load the native library.

System.loadLibrary("opencv_java246");

new DetectFaceDemo().run();

}

}

//運行結果:

//Hello, OpenCV

//

//Running DetectFaceDemo

///E:/eclipse_Jee/workspace/JavaOpenCV246/bin/com/njupt/zhb/test/lbpcascade_frontalface.xml

//Detected 8 faces

//Writing faceDetection.png
package com.njupt.zhb.test;
public class TestMain {
public static void main(String[] args) {
System.out.println("Hello, OpenCV");
// Load the native library.
System.loadLibrary("opencv_java246");
new DetectFaceDemo().run();
}
}
//運行結果:
//Hello, OpenCV
//
//Running DetectFaceDemo
///E:/eclipse_Jee/workspace/JavaOpenCV246/bin/com/njupt/zhb/test/lbpcascade_frontalface.xml
//Detected 8 faces
//Writing faceDetection.png

6. 如何解決在交叉編譯的問題的crt0.o

如何添加ctr0.o?我得到這個錯誤:
yagarto-4.7.2/bin/arm-none-eabi-ld: cannot find crt0.o: No such file or directory
collect2: error: ld returned 1 exit status`
離這里很簡單的程序:
/* -- first.s */
/* This is a comment */
.global main /* 'main' is our entry point and must be global */
.func main /* 'main' is a function */
main: /* This is main */
mov r0, #2 /* Put a 2 inside the register r0 */
bx lr /* Return from main */
我看這2個線程,並沒有得到任何完整的和直截了當的回答: 什麼是從背後取下gcc4.7.x的crt0.o的理由? 我有這些文件,什麼是CRT0和外箱之間的區別不就可以了?
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/crtbegin.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/crtend.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/crti.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/crtn.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/crtbegin.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/crtend.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/crti.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/crtn.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/v6m/crtbegin.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/v6m/crtend.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/v6m/crti.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/v6m/crtn.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/v7m/crtbegin.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/v7m/crtend.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/v7m/crti.o
./yagarto-4.7.2/lib/gcc/arm-none-eabi/4.7.2/thumb/v7m/crtn.o
在SO解決方案給周圍的工作不工作了:
arm-none-eabi-gcc -o first assembler_tutorial/chapter01/first.o -nostartfiles
./yagarto-4.7.2/bin/arm-none-eabi-ld: warning: cannot find entry symbol _start; defaulting to 0000000000008000

本文地址 :CodeGo.net/603832/
-------------------------------------------------------------------------------------------------------------------------
1. vectors.s
.globl _start
_start:
mov sp,#0x8000
bl main
hang: b hang
main.s
.globl main
main:
mov r0,#2
bx lr
MEMMAP(鏈接腳本
MEMORY
{
ram : ORIGIN = 0x8000, LENGTH = 0x10000
}
SECTIONS
{
.text : { *(.text*) } > ram
.bss : { *(.bss*) } > ram
}
命令
arm-none-eabi-as vectors.s -o vectors.o
arm-none-eabi-as main.s -o main.o
arm-none-eabi-ld vectors.o main.o -T memmap -o main.elf
arm-none-eabi-objmp -D main.elf > main.list
arm-none-eabi-obj main.elf -O binary main.bin
結果
main.elf: file format elf32-littlearm

Disassembly of section .text:
00008000 <_start>:
8000: e3a0d902 mov sp, #32768 ; 0x8000
8004: eb000000 bl 800c <main>
00008008 <hang>:
8008: eafffffe b 8008 <hang>
0000800c <main>:
800c: e3a00002 mov r0, #2
8010: e12fff1e bx lr
如果你想,而不是ASM主C,則 main.c中
int main ( void )
{
return(2);
}
命令
arm-none-eabi-as vectors.s -o vectors.o
arm-none-eabi-gcc -Wall -Werror -O2 -nostdlib -nostartfiles -ffreestanding -c main.c -o main.o
arm-none-eabi-ld vectors.o main.o -T memmap -o main.elf
arm-none-eabi-objmp -D main.elf > main.list
arm-none-eabi-obj main.elf -O binary main.bin
結果
main.elf: file format elf32-littlearm

Disassembly of section .text:
00008000 <_start>:
8000: e3a0d902 mov sp, #32768 ; 0x8000
8004: eb000000 bl 800c <main>
00008008 <hang>:
8008: eafffffe b 8008 <hang>
0000800c <main>:
800c: e3a00002 mov r0, #2
8010: e12fff1e bx lr
我更喜歡其他的函數不是主要的編譯器添加額外的行李,當他們看到那個函數 vectors.s
.globl _start
_start:
mov sp,#0x8000
bl notmain
hang: b hang
main.c中
int notmain ( void )
{
return(2);
}
結果
main.elf: file format elf32-littlearm

Disassembly of section .text:
00008000 <_start>:
8000: e3a0d902 mov sp, #32768 ; 0x8000
8004: eb000000 bl 800c <notmain>
00008008 <hang>:
8008: eafffffe b 8008 <hang>
0000800c <notmain>:
800c: e3a00002 mov r0, #2
8010: e12fff1e bx lr

7. windows環境下eclipse c/c++編譯出現警告make: warning: Clock skew detected. Your build may be incompl

這個是說編譯器發現時間改變了,,告訴你可能編譯的東西不正確(注意,,是目標文件的版本),如果你知道makefile的話就應該知道 是怎麼回事了,,不過像ide都 是已經把makefile寫好的,,看看makefile就清楚 了,, 用touch命令試試看,好像是可以解決,,還有就是makefile是根據 時間來決定 某個源文件 是否被 編譯為目標文件,你如果改變了系統 時間就回出現這種 情況 ,,用虛擬機和SSH都 可能回去現這種 問題,,不過工程粘的話應該沒什麼問題,,如果想知道makefile是怎麼樣知道時間的,,這又得看inode節點了,,所以後面還是很麻煩的,,,有不知道的在問

8. 交叉編譯qt程序時出現「錯誤: 未知的轉義序列:『\Q』 」 請問如何解決。。。在x86上編譯只是警告。。

在C++中『\』是轉義字元。所以如果你不是用來轉義可以用『/』,如果你需要字元『\』,請使用「\\」代替『\』

9. 如何構建MIPS交叉編譯工具鏈

第一步 創建目錄以及環境變數
在當前用戶目錄下創建target-project文件夾,在該文件夾下創建mips-mole文件夾,在mips-mole文件夾下創建三個文件夾:build-tools,kernel,tools,最後,在build-tools文件夾下創建build-gcc,build-boot-gcc,build-glibc,build-binutils文件夾。命令如下:

$ cd ~
$ mkdir -p ./target-project/mips-mole/{kernel/,tools/,build-tools/{build-gcc,build-boot-gcc,build-glibc,build-binutils}}
$ tree ./target-project/mips-mole/

使用腳本構建環境變數
#! /bin/bash

注意修改/home/用戶名,修改正確後,使用source使腳本生效

$ cd target-project
$ chmod +x mips.sh
$ source mips.sh
可以使用echo査看相關變數名以觀察環境變數是否生效。
最後把linux-2.6.38.tar.bz2下載放置在kernel文件夾下,binutils-2.22.tar.gz,gcc-4.6.2.tar.gz,glibc-2.14.tar.gz,glibc-ports-2.14.tar.gz,gmp-5.0.4.tar.gz,mpc-0.9.tar.gz,mpfr-3.0.1.tar.gz下載放置在build-tools文件夾下。

第二步 安裝基於MIPS的linux頭文件

$ cd $PRJROOT/kernel
$ tar -xjvf linux-2.6.38.tar.bz2
$ cd linux-2.6.38
在指定路徑下創建include文件夾,用來存放相關頭文件。

$ mkdir -p $TARGET_PREFIX/include
保證linux源碼是干凈的。

$ make mrproper
生成需要的頭文件。
$ make ARCH=mips headers_check

$ make ARCH=mips INSTALL_HDR_PATH=dest headers_install
將dest文件夾下的所有文件復制到指定的include文件夾內。

$ cp -rv dest/include/* $TARGET_PREFIX/include
最後刪除dest文件夾
$ rm -rf dest
$ ls -l $TARGET_PREFIX/include

第三步 安裝binutils-2.22

$ cd $PRJROOT/build-tools
$ tar -xzvf binutils-2.22.tar.gz
$ cd build-binutils
$ ../binutils-2.22/configure --target=$TARGET --prefix=$PREFIX
$ make
$ make install

再安裝automake。

$ tar -xzvf automake-1.11.1.tar.gz
$ cd automake-1.11.1
$ ./configure
$ make
$ sudo make install
下面開始修改相關文件,主要是去掉-Werror。
$ cd $PRJROOT/build-tools/binutils-2.22/gas
$ ge dit configure
將下面內容
# Enable -Werror by default when using gcc
if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
ERROR_ON_WARNING=yes
fi
修改為
# Enable -Werror by default when using gcc
if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
ERROR_ON_WARNING=no
fi
但是,需要重新configure生成Makefile.in。

$ ./configure (在binutils/gas路徑下的configure)
$ make distclean (切記)
然後重新執行第三步,這次編譯可過。

第四步 安裝gcc引導器

$ cd $PRJROOT/build-tools
$ tar -xzvf gcc-4.6.2.tar.gz
$ tar -xjvf gmp-5.0.4.tar.bz2
$ mv gmp-5.0.4 ./gcc-4.6.2/gmp
$ tar -xzvf mpc-0.9.tar.gz
$ mv mpc-0.9 ./gcc-4.6.2/mpc
$ tar -xzvf mpfr-3.0.1.tar.gz
$ mv mpfr-3.0.1 ./gcc-4.6.2/mpfr
$ cd build-boot-gcc
$ ../gcc-4.6.2/configure --target=$TARGET --prefix=$PREFIX --disable-shared <br>--without-headers --with-newlib --enable-languages=c --disable-decimal-float <br>--disable-libgomp --disable-libmudflap --disable-libssp --disable-threads --disable-multilib
編譯並安裝gcc引導器、libgcc庫。

$ make all-gcc
$ make all-target-libgcc
$ make install-gcc
$ make install-target-libgcc

第五步 編譯glibc

$ cd $PRJROOT/build-tools
$ tar xzvf glibc-2.14.tar.gz
$ cd glibc-2.14
刪除Makefonfig文件中的內容-lgcc_eh。

$ cp -v Makeconfig{,.b腸花斑拘職餃辦邪暴矛k}
$ sed -e 's/-lgcc_eh//g' Makeconfig.bk > Makeconfig
$ cd ..
$ tar -xjvf glibc-ports-2.14.tar.bz2
$ mv glibc-ports-2.14 ./glibc-2.14/ports
$ cd build-glibc
$ CC=mipsel-linux--gcc ../glibc-2.14/configure --host=$TARGET --prefix="/usr" <br>--enable-add-ons --with-headers=$TARGET_PREFIX/include libc_cv_forced_unwind=yes <br>libc_cv_c_cleanup=yes
注意:此時如何設置了LD_LIBRARY_PATH環境變數會configure error,需要刪除該變數重新configure。

$ make
$ make install_root=$TARGET_PREFIX prefix=」」 install
第六步 完全安裝gcc
首先,也是很重要的是去掉libc等庫文件的絕對路徑。

$ cd $TARGET_PREFIX/lib
備份一下。

$ cp libc.so libc.so.bk
$ gedit libc.so
將原內容
GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a AS_NEEDED ( /lib/ld.so.1 ) )
修改為
GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld.so.1 ) )

$ cp libpthread.so libpthread.so.bk
$ gedit libpthread.so
將原內容
GROUP ( /lib/libpthread.so.0 /lib/libpthread_nonshared.a )
修改為
GROUP ( libpthread.so.0 libpthread_nonshared.a )
然後可以完全編譯gcc。

10. 交叉編譯php問題,怎麼解決

因為目標板跟主機都是X86架構,正常來說,只要主機編譯通過並順利執行的程序,目標板應該也能順利,但這種不穩的方法,不妥當,於是決定還是為了心安,用交叉編譯工具來編譯程序
進入到php源代碼
CC=某某交叉編譯器 ./configure --prefix=/home/app/php --with-gd=/home/app/gd
gd我已經進行了交叉編譯,包含了jpeg,png,freetype等東西了,這里就略帶了
按照我上面的配置,產生了一個錯誤
configure: error: GD build test failed cross compile

提示說找不到GD組建,於是重新確定了一下路徑有沒錯,那當然是沒錯的啦
於是去除了交叉編譯器
./configure --prefix=/home/app/php --with-gd=/home/app/gd

這樣的配置,就能如常執行下去
最後實在沒辦法了,看一下配置日誌
vi config.log
發現以下信息
warning: libjpeg.so.62, needed by /home/app/gd/lib/libgd.so, not found (try using -rpath or -rpath-link)

庫問題,雖然編譯了jpeg但是,交叉編譯器不懂去找這些庫,好吧,好人做到底,
find -name libjpeg.so.62 找出庫,拷貝到gd的安裝目錄下的 lib 文件夾

熱點內容
買車不能要什麼配置 發布:2024-05-21 14:56:20 瀏覽:426
無錫皮箱密碼鎖哪裡賣 發布:2024-05-21 14:31:03 瀏覽:471
如何下載泡泡安卓版 發布:2024-05-21 14:27:22 瀏覽:296
python初始化對象 發布:2024-05-21 14:22:27 瀏覽:253
socket編程udp 發布:2024-05-21 14:16:21 瀏覽:999
沙盤模擬資源配置怎麼寫 發布:2024-05-21 14:16:21 瀏覽:39
文件夾adi 發布:2024-05-21 14:15:47 瀏覽:708
吉利gl中配有哪些配置 發布:2024-05-21 14:07:16 瀏覽:206
如何發布php 發布:2024-05-21 14:07:15 瀏覽:345
plsql腳本 發布:2024-05-21 13:46:41 瀏覽:936