Raspberry Pi çapraz derleyiciyi Linux ana makineme nasıl kurabilirim?


114

Ubuntu makinemde çalışan Raspberry Pi için çapraz derlemeye çalışıyorum.

İlk denemelerim sırasında Ubuntu deposunda bulunan arm-linux-gnueabi derleyicisini kullanıyordum. Bunu çalıştırdım. Tüm bağımlılıklarımı oluşturabildim ve cmake projemde çapraz derleyiciyi kullanabildim.

Ancak, hf sürümünü kullanmam gerektiğine inanıyorum, bu yüzden arm-linux-gnueabihf'e geçtim. Sonra bunun armv6 olduğu için Raspberry Pi ile çalışmadığını fark ettim.

Biraz Google'dan sonra , GitHub'dan önceden oluşturulmuş araç zincirini buldum .

Araç zincirini indirdim, ancak nasıl "kurulacağını" gerçekten anlamıyorum. Dosyaları ana dizinime çıkardım. Dizin yapısı şuna benzer:

/gcc-linearo-arm-linux-gnueabihf-raspbian
    /arm-linux-gnueabihf
        /bin
            (contains g++, gcc, etc)
        /lib
            (contains libstdc++ library)
    /bin
        (contains arm-linux-gnueabihf-g++, arm-linux-gnueabihf-...)
    /lib
        (gcc lib stuff)

Dizini INNER bin klasörüne değiştirirsem, herhangi bir sorun olmadan terminalden bir test programı derleyebilirim.

~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/
arm-linux-gnueabihf/bin$ g++ test.cpp -o test

Daha sonra, araçların önekli sürümlerini içeren OUTER bin klasöründe bir test programı derlemeye çalıştım.

 ~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin$ 
 arm-linux-gnueabihf-g++ test.cpp -o test

Ancak, derleyiciyi şimdi (iç bin dizininin dışından) kullanmaya çalıştığımda, araç zinciriyle birlikte gelen libstdc ++ paylaşılan kitaplığını bulamıyor:

arm-linux-gnueabihf-gcc: error while loading shared libraries: 
libstdc++.so.6: cannot open shared object file: No such file or directory.

Ayrıca, derleyiciyi bin dizinine gitmek zorunda kalmadan kullanabilmek istiyorum. Bu yüzden OUTER bin dizinini (önekli sürümleri istediğim için) ve her iki kitaplık dizinini PATH'ıma eklemeyi denedim:

export PATH=$PATH:~/tools/.../bin
export PATH=$PATH:~/tools/.../lib
export PATH=$PATH:~/tools/.../.../lib

Ancak bu aynı hataya neden olur. Araç zincirini, Ubuntu deposundaki çapraz derleyicileri kullandığım zaman olduğu gibi, her yerden kullanabilmek için nasıl "kurmalı"?


Dir. Yüklemek için CMAKE_C {XX} _FLAGS aracılığıyla --sysroot ayarlamayı deneyin.
auselen

--Sysroot için farklı yollar denedim, ama bu yardımcı olmadı. Sistem kökü için hangi yolu belirtmem gerektiğinden gerçekten emin değilim. Araç zincirinin dizin yapısı ile ilgili olarak yukarıya bakın. Ayrıca, bazı Googling --sysroot'un libstdc ++ için yardımcı olmadığını gösteriyor gibi görünüyor.
pqvst

/ Gcc-linearo-arm-linux-gnueabihf-raspbian veya / gcc-linearo-arm-linux-gnueabihf-raspbian / arm-linux-gnueabihf
auselen

launchpad.net/gcc-arm-embedded buraya gidin ve tarball'ı indirin ve çıkartın. Bin dizine giden yolunuzu ayarlayın ... bitti. Veya codourcery.com'a gidin (şimdi akıl hocası grafikleri) lite sürümünü alın, untar / bz, bin dizinine giden yolu ayarlayın ... tamam.
old_timer

Yanıtlar:


235

Bunu takip etmesi kolaylaşması için size bir öğretici olarak yazmaya çalışacağım.

NOT: Bu eğitim yalnızca daha eski raspbian görüntüleri için çalışır. Debian Buster'ı temel alan daha yeni Raspbian için bu başlıkta aşağıdaki nasıl yapılır bölümüne bakın: https://stackoverflow.com/a/58559140/869402

Ön Gereksinimler

Başlamadan önce aşağıdakilerin kurulu olduğundan emin olmanız gerekir:

apt-get install git rsync cmake ia32-libs

Bir Pie'yi çapraz derleyelim!

Ana dizininizde adlı bir klasör oluşturmakla başlayın raspberrypi.

Bu klasöre gidin ve yukarıda bahsettiğiniz TÜM araçlar klasörünü aşağı çekin:

git clone git://github.com/raspberrypi/tools.git

gcc-linaro-arm-linux-gnueabihf-raspbianYanlış okumadıysam , aşağıdakileri kullanmak istediniz .

Ana dizininize gidin ve şunu ekleyin:

export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

isimli dosyanın sonuna ~/.bashrc

Artık ya oturumu kapatıp tekrar oturum açabilir (yani terminal oturumunuzu yeniden başlatabilirsiniz) ya da mevcut terminal oturumunuzdaki . ~/.bashrceki almak için terminalinizi çalıştırabilirsiniz PATH.

Şimdi, derleyiciye erişebildiğinizi doğrulayın arm-linux-gnueabihf-gcc -v. Bunun gibi bir şey almalısın:

Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/home/tudhalyas/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../libexec/gcc/arm-linux-gnueabihf/4.7.2/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: /cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.b
 uild/src/gcc-linaro-4.7-2012.08/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-
 linux-gnu --target=arm-linux-gnueabihf --prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-l
 inux-gnueabihf-raspbian-linux/install --with-sysroot=/cbuild/slaves/oort61/crosstool-ng/builds/
 arm-linux-gnueabihf-raspbian-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fo
 rtran --disable-multilib --with-arch=armv6 --with-tune=arm1176jz-s --with-fpu=vfp --with-float=
 hard --with-pkgversion='crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08' --with-bugurl=
 https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgom
 p --enable-libssp --with-gmp=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-rasp
 bian-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/cbuild/slaves/oort61/crosstool-
 ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-mpc
 =/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-
 gnueabihf/build/static --with-ppl=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf
 -raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/cbuild/slaves/oort61/cros
 stool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --wi
 th-libelf=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/a
 rm-linux-gnueabihf/build/static --with-host-libstdcxx='-L/cbuild/slaves/oort61/crosstool-ng/bui
 lds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static/lib -lpwl' --ena
 ble-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-plugin --enable-gol
 d --with-local-prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-li
 nux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.7.2 20120731 (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08
 )

Ama hey! Bunu yaptım ve libler hala çalışmıyor!

Henüz bitirmedik! Şimdiye kadar sadece temelleri yaptık.

Senin içinde raspberrypiklasör adında bir klasör oluşturun rootfs.

Şimdi tüm dizini /libve /usrdizini bu yeni oluşturulan klasöre kopyalamanız gerekiyor . Genellikle rpi görüntüsünü yukarı getiririm ve rsync ile kopyalarım:

rsync -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr} $HOME/raspberrypi/rootfs

nerede 192.168.1.PIsenin Ahududu Pi IP ile değiştirilir.

Şimdi bir cmakeyapılandırma dosyası yazmamız gerekiyor . ~/home/raspberrypi/pi.cmakeFavori düzenleyicinizde açın ve aşağıdakileri ekleyin:

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/raspberrypi/rootfs)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Artık derlemek mümkün olmalıdır cmakesadece bu ekstra bayrağını ekleyerek programları: -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake.

Bir cmake merhaba dünya örneği kullanarak :

git clone https://github.com/jameskbride/cmake-hello-world.git 
cd cmake-hello-world
mkdir build
cd build
cmake -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake ../
make
scp CMakeHelloWorld pi@192.168.1.PI:/home/pi/
ssh pi@192.168.1.PI ./CMakeHelloWorld

4
Öğreticinizi adım adım takip ettim ve artık hatasız derleme yapabiliyorum. Teşekkürler! Cmake örneğini dahil ettiğiniz için ekstra teşekkürler.
pqvst

1
Bu basit projeler için iyi çalışıyor, ancak opencv'ye bağlı olan CMAKE projemi çapraz derleyemiyorum. Şu hatayı alıyorum "/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../ .. /../../arm-linux-gnueabihf/bin/ld: uyarı: libjpeg.so.8, /opt/rpi-rootfs/usr/lib/libopencv_highgui.so tarafından gerekli, bulunamadı (-rpath veya -rpath-link)". Cmake ayrıca "-Wl, -rpath, / opt / rpi-rootfs / usr / lib" bayrağını bağlayıcıya
aktarıyor gibi görünüyor

18
ia32-libsPaket Ubuntu 13.10 üzerinde kullanılamaz. Onun libc6-i386 lib32z1 lib32stdc++6yerine kullandım .
Ben T

2
Harika öğretici cevap! Ödül al :)
andrewdotnich

2
Kapsamlı bir eğitim için teşekkür ederiz! Pi makinesinden / lib / usr klasörlerinin neden kopyalanması gerektiğini açıklar mısınız?
Marcello

14

Daha yeni Raspbian Debian Buster görüntüleri ve ARMv6 için geliştirme

@Stenyg'in cevabı yalnızca daha eski Raspbian görüntüleri için işe yarar. Debian Buster'a dayanan yakın zamanda piyasaya sürülen Raspbian, güncellenmiş bir araç zinciri gerektirir:

Debian Buster'da gcc derleyicisi ve glibc, 8.3 sürümüne güncellendi. Araç zinciri git://github.com/raspberrypi/tools.githala eski gcc 6 sürümüne dayanmaktadır. Bu, kullanmanın git://github.com/raspberrypi/tools.gitbirçok derleme hatasına yol açacağı anlamına gelir .

Bu eğitimde @Stenyg cevabı temel alınmıştır. İnternetteki diğer birçok çözüme ek olarak, bu eğitim ayrıca ARMv6 CPU'ya dayalı eski Rasperry Pi'yi (A, B, B +, Sıfır ) destekler. Ayrıca bkz: GCC 8 Cross Compiler, ARMv6 yerine ARMv7 yürütülebilir çıktılar

Araç zincirini kurun

Güncellenmiş bir araç zinciri içeren resmi bir git deposu yoktur (Bkz. Https://github.com/raspberrypi/tools/issues/102 ).

GCC8 ve daha yenisine dayalı ARMv6 için derlenmiş ve önceden derlenmiş araç zincirlerini içeren yeni bir github deposu oluşturdum:

https://github.com/Pro/raspi-toolchain

Projenin benioku dosyasında belirtildiği gibi, bunlar araç zincirini edinme adımlarıdır. Kendiniz de inşa edebilirsiniz (daha fazla ayrıntı için BENİOKU'ya bakın).

  1. Araç zincirini indirin:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
  1. Çıkarın. Not: Araç zinciri, /opt/cross-pi-gcckonumdan bağımsız olmadığı için içinde olmalıdır .
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
  1. Bitirdiniz! Araç zinciri şimdi/opt/cross-pi-gcc

  2. İsteğe bağlı olarak, aşağıdakileri ekleyerek araç zincirini yolunuza ekleyin:

export PATH=$PATH:/opt/cross-pi-gcc/bin

isimli dosyanın sonuna ~/.bashrc

Artık ya oturumu kapatıp tekrar oturum açabilir (yani terminal oturumunuzu yeniden başlatabilirsiniz) ya da mevcut terminal oturumunuzdaki . ~/.bashrceki almak için terminalinizi çalıştırabilirsiniz PATH.

Raspberry PI'dan kitaplıkları alın

Bazı özel kitaplıkların kurulu olabileceği kendi Raspberry Pi'nizi çapraz derlemek için, bu kitaplıkları ana makinenize almanız gerekir.

Bir klasör oluşturun $HOME/raspberrypi. Senin içinde raspberrypiklasör adında bir klasör oluşturun rootfs.

Şimdi tüm dizini /libve /usrdizini bu yeni oluşturulan klasöre kopyalamanız gerekiyor . Genellikle rpi görüntüsünü yukarı getiririm ve rsync ile kopyalarım:

rsync -vR --progress -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr,opt/vc/lib} $HOME/raspberrypi/rootfs

nerede 192.168.1.PIsenin Ahududu Pi IP ile değiştirilir.

Projenizi derlemek için CMake kullanın

CMake'ye kendi araç zincirinizi almasını söylemek için, derleyici ayarlarını başlatan bir araç zinciri dosyasına sahip olmanız gerekir.

Bu araç zinciri dosyasını buradan edinin : https://github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake

Artık cmakeprogramlarınızı bu ekstra bayrağı ekleyerek -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmakeve doğru ortam değişkenlerini ayarlayarak derleyebilmelisiniz :

export RASPBIAN_ROOTFS=$HOME/raspberry/rootfs
export PATH=/opt/cross-pi-gcc/bin:$PATH
export RASPBERRY_VERSION=1
cmake -DCMAKE_TOOLCHAIN_FILE=$HOME/raspberry/Toolchain-rpi.cmake ..

Örnek bir merhaba dünya burada gösterilmektedir: https://github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh


Rsync sırasında "güvenli olmayan sembolik bağ görmezden geliniyor" mesajları alıyorum. Tamam mı?
Alexandr Zarubkin

İyi olmalı. --safe-linksTartışmadan kaynaklanıyor
Stefan Profanter

Ne yazık ki bunu bir raspi 4 için test edemem, ancak eski Raspi'den çalıştırılabilir dosyalar normalde daha yeni Raspi'de de yürütülebildiğinden, bu da çalışmalıdır. Birisi test edebilecekse, açıklamayı güncellemekten memnuniyet
duyarım

Merhabalar @StefanProfanter, başka bir yola yerleştirmek için araç zinciri yolunu bağımsız hale getirmeye ne dersiniz /opt/cross-pi-gcc ?
nass

@ nass maalesef hayır. Çapraz derleyiciler konusunda uzman değilim. Birisi bu konuda daha fazla bilgiye ve bilgiye sahipse, depomu güncellemekten memnuniyet duyarım! Belki yeni bir Stackoverflow Sorusu oluşturabilirsiniz.
Stefan Profanter

5

Ben derleyici (alamadım x64versiyon) kullanmak sysrootekledim kadar SET(CMAKE_SYSROOT $ENV{HOME}/raspberrypi/rootfs)hiç pi.cmake.


Merhaba Dünya örneğini CMAKE_SYSROOT seti olmadan çalıştırabilirdim, ancak pi.cmake dosyasını paylaşılan bir kitaplık kullanan bir projeyle denerken libstdc ++. So.6 bulunamadı bağlayıcı hatası aldım. CMAKE_SYSROOT'u ayarladıktan sonra her şey kusursuz çalıştı.
Michael Hilbert

4

Windows ana bilgisayarı için bu öğreticiyi şiddetle tavsiye etmek istiyorum :

  • Araç zincirini indirin ve yükleyin
  • Sysroot'u RPi include / lib dizinlerinizle senkronize edin
  • Kodunuzu derleyin
  • Sürükle ve kullanarak RPI'nin için yürütülebilir damla SmarTTY
  • Çalıştır şunu!

Ne fazla ne eksik!

Raspberry, Beaglebone, Cubieboard, AVR (Atmel) ve daha fazlası için mevcut önceden oluşturulmuş GNU Araç Zincirleri


Sorunun metninin ilk satırından bu yana düzenleme "Ubuntu makinemde çalışan Raspberry Pi için çapraz derlemeye çalışıyorum." ve bunu başlıkta açıkladım. Bu yanıt yine de hoş karşılanır, ancak bunu şu adresten de yanıtlamak isteyebilirsiniz: raspberrypi.stackexchange.com/questions/27163/… ki bu daha spesifiktir.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

4

Clang'ı da kullanabilirsiniz . Eskiden GCC'den daha hızlıydı ve şimdi oldukça istikrarlı bir şey. Kaynaklardan clang oluşturmak çok daha kolaydır ( oluşturma işlemi sırasında gerçekten bir fincan kahve içebilirsiniz ).

Kısacası:

  1. Clang ikili dosyalarını (sudo apt-get install clang) edinin .. veya indirin ve oluşturun ( buradaki talimatları okuyun )
  2. Ahududu kök dosyalarınızı bağlayın (sshfs aracılığıyla bağlanan gerçek kökler veya bir görüntü olabilir).
  3. Kodunuzu derleyin:

    path/to/clang --target=arm-linux-gnueabihf --sysroot=/some/path/arm-linux-gnueabihf/sysroot my-happy-program.c -fuse-ld=lld

İsteğe bağlı olarak eski arm-linux-gnueabihf binutils kullanabilirsiniz. Daha sonra sonunda "-fuse-ld = lld" bayrağını kaldırabilirsiniz.

Aşağıda cmake araç zinciri dosyam var.

toolchain.cmake

set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# Custom toolchain-specific definitions for your project
set(PLATFORM_ARM "1")
set(PLATFORM_COMPILE_DEFS "COMPILE_GLES")

# There we go!
# Below, we specify toolchain itself!

set(TARGET_TRIPLE arm-linux-gnueabihf)

# Specify your target rootfs mount point on your compiler host machine
set(TARGET_ROOTFS /Volumes/rootfs-${TARGET_TRIPLE})

# Specify clang paths
set(LLVM_DIR /Users/stepan/projects/shared/toolchains/llvm-7.0.darwin-release-x86_64/install)
set(CLANG ${LLVM_DIR}/bin/clang)
set(CLANGXX ${LLVM_DIR}/bin/clang++)

# Specify compiler (which is clang)
set(CMAKE_C_COMPILER   ${CLANG})
set(CMAKE_CXX_COMPILER ${CLANGXX})

# Specify binutils

set (CMAKE_AR      "${LLVM_DIR}/bin/llvm-ar" CACHE FILEPATH "Archiver")
set (CMAKE_LINKER  "${LLVM_DIR}/bin/llvm-ld" CACHE FILEPATH "Linker")
set (CMAKE_NM      "${LLVM_DIR}/bin/llvm-nm" CACHE FILEPATH "NM")
set (CMAKE_OBJDUMP "${LLVM_DIR}/bin/llvm-objdump" CACHE FILEPATH "Objdump")
set (CMAKE_RANLIB  "${LLVM_DIR}/bin/llvm-ranlib" CACHE FILEPATH "ranlib")

# You may use legacy binutils though.
#set(BINUTILS /usr/local/Cellar/arm-linux-gnueabihf-binutils/2.31.1)
#set (CMAKE_AR      "${BINUTILS}/bin/${TARGET_TRIPLE}-ar" CACHE FILEPATH "Archiver")
#set (CMAKE_LINKER  "${BINUTILS}/bin/${TARGET_TRIPLE}-ld" CACHE FILEPATH "Linker")
#set (CMAKE_NM      "${BINUTILS}/bin/${TARGET_TRIPLE}-nm" CACHE FILEPATH "NM")
#set (CMAKE_OBJDUMP "${BINUTILS}/bin/${TARGET_TRIPLE}-objdump" CACHE FILEPATH "Objdump")
#set (CMAKE_RANLIB  "${BINUTILS}/bin/${TARGET_TRIPLE}-ranlib" CACHE FILEPATH "ranlib")

# Specify sysroot (almost same as rootfs)
set(CMAKE_SYSROOT ${TARGET_ROOTFS})
set(CMAKE_FIND_ROOT_PATH ${TARGET_ROOTFS})

# Specify lookup methods for cmake
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# Sometimes you also need this:
# set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# Specify raspberry triple
set(CROSS_FLAGS "--target=${TARGET_TRIPLE}")

# Specify other raspberry related flags
set(RASP_FLAGS "-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS")

# Gather and distribute flags specified at prev steps.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CROSS_FLAGS} ${RASP_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CROSS_FLAGS} ${RASP_FLAGS}")

# Use clang linker. Why?
# Well, you may install custom arm-linux-gnueabihf binutils,
# but then, you also need to recompile clang, with customized triple;
# otherwise clang will try to use host 'ld' for linking,
# so... use clang linker.
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld)

2

QT5'i git: //github.com/raspberrypi/tools.git adresindeki (oldukça eski) araç zincirlerinden herhangi biriyle derleyemedim. Konfigürasyon betiği, bir "mimari belirlenemedi" hatasıyla ve içerme dizinleri için büyük yol sorunları ile başarısız olmaya devam etti. Benim için işe yarayan, Linaro alet zincirini kullanmaktı

http://releases.linaro.org/components/toolchain/binaries/4.9-2016.02/arm-linux-gnueabihf/runtime-linaro-gcc4.9-2016.02-arm-linux-gnueabihf.tar.xz

ile bütünlüğünde

https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py

Sysroot'un sembolik bağlantılarını düzeltememek, burada açıklandığı gibi tanımlanmamış sembol hatalarına yol açar: Ahududu pi için Qt kitaplıkları oluştururken bir hata Bu, tools.git'ten fixQualifiedLibraryPaths komut dosyasını denediğimde başıma geldi. Diğer her şey ayrıntılı olarak http://wiki.qt.io/RaspberryPi2EGLFS'de açıklanmaktadır . Yapılandırma ayarlarım şunlardı:

./configure -opengl es2 -device linux-rpi3-g ++ -device-seçenek CROSS_COMPILE = / usr / local / rasp / gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf / bin / arm-linux-gnueabihf- -sysroot / usr / local / rasp / sysroot -opensource -confirm-license -optimized-qmake -reduce-export -release -make libs -prefix / usr / local / qt5pi -hostprefix / usr / local / qt5pi

/ usr / local / rasp / sysroot, yerel Raspberry Pi 3 Raspbian (Jessie) sistem kopyamın yolu ve / usr / local / qt5pi, cihaza kopyalanması gereken çapraz derlenmiş QT'nin yolu. Araç zincirinizi seçtiğinizde, Jessie'nin GCC 4.9.2 ile birlikte geldiğini unutmayın.


2

İlk soru epey bir süre önce yayınlandı ve bu arada Debian multiarch desteği alanında büyük ilerleme kaydetti.

Multiarch, çapraz derleme için büyük bir başarıdır!

Özetle, Raspbian Jessie çapraz derleme için multiarch'tan yararlanmak için aşağıdaki adımlar gereklidir:

  • Ubuntu sunucunuzda Debian Jessie amd64'ü bir chroot veya LXC kapsayıcısı içinde kurun.
  • Yabancı mimari armhf'yi etkinleştirin.
  • Çapraz derleyiciyi emdebian araçları deposundan yükleyin.
  • Özel bir gcc özellik dosyası yazarak çapraz derleyiciyi ayarlayın (varsayılan olarak ARMv7-A için kod üretir).
  • Raspbian deposundan armhf kitaplıklarını (libstdc ++ vb.) Yükleyin.
  • Kaynak kodunuzu oluşturun.

Bu çok iş olduğu için yukarıdaki kurulumu otomatikleştirdim. Buradan okuyabilirsiniz:

Raspbian için Çapraz Derleme


1

hem windows hem de linux üzerinden çapraz derlemeyi ve dağıtmayı oldukça basit hale getiren bir CDP Studio IDE mevcuttur ve kurulum sırasında ahududu araç zinciri onay kutusunu kontrol edebilirsiniz. (Not: GPIO ve I2C desteğine sahip olduğundan bunlara erişmek için koda gerek yoktur)

Ahududu kullanımının IDE demosu burada: https://youtu.be/4SVZ68sQz5U

ve IDE'yi buradan indirebilirsiniz: https://cdpstudio.com/home-edition

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.