আমার লিনাক্স হোস্ট মেশিনে রাস্পবেরি পাই ক্রস সংকলক কীভাবে ইনস্টল করবেন?


114

আমি আমার উবুন্টু মেশিনে কাজ করে রাস্পবেরি পাইয়ের জন্য ক্রস-সংকলন পাওয়ার চেষ্টা করছি।

আমার প্রাথমিক প্রয়াসের সময় আমি আর্ম-লিনাক্স-জ্ঞুয়াবি সংকলক ব্যবহার করছিলাম যা উবুন্টু রেপোতে উপলব্ধ। আমি এই কাজ পেয়েছিলাম। আমি আমার সমস্ত নির্ভরতা তৈরি করতে এবং আমার ক্যামেক প্রকল্পে ক্রস-সংকলকটি ব্যবহার করতে সক্ষম হয়েছি।

যাইহোক, আমি বিশ্বাস করি আমার এইচএফ সংস্করণটি ব্যবহার করা উচিত, তাই আমি আর্ম-লিনাক্স-জ্নুয়াবিহ্ফটিতে স্যুইচ করেছি। তখন আমি বুঝতে পেরেছিলাম যে এটি রাস্পবেরি পাইয়ের সাথে কাজ করে না কারণ এটি আর্মভ6।

কিছু গুগলিংয়ের পরে আমি গিটহাব থেকে প্রাক-বিল্টড টুলচেনটি পেয়েছি

আমি সরঞ্জামচেইনটি ডাউনলোড করেছি, তবে কীভাবে এটি "ইনস্টল" করবেন তা আমি সত্যিই বুঝতে পারি না। আমি ফাইলগুলি আমার হোম ডিরেক্টরিতে বের করেছি। ডিরেক্টরি কাঠামো এর মতো দেখাচ্ছে:

/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)

যদি আমি ডিরেক্টরিটি INNER বিন ফোল্ডারে পরিবর্তন করি তবে আমি কোনও সমস্যা ছাড়াই টার্মিনাল থেকে একটি পরীক্ষা প্রোগ্রাম সংকলন করতে সক্ষম হয়েছি।

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

আমি তখন OUTER বিন ফোল্ডারে একটি পরীক্ষা প্রোগ্রাম সংকলনের চেষ্টা করেছি, যাতে সরঞ্জামগুলির উপসর্গীকৃত সংস্করণ রয়েছে।

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

যাইহোক, আমি এখন যখন (অভ্যন্তরীণ বিন ডিরেক্টরি থেকে বাইরের) সংকলকটি ব্যবহার করার চেষ্টা করি তখন এটি টুলচেইনের সাথে আসা লাইবস্টিডি ++ ভাগ করা লাইব্রেরিটি খুঁজে পেতে অক্ষম থাকে:

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

তদুপরি, আমি বিন ডিরেক্টরিতে নেভিগেট না করে সংকলকটি ব্যবহার করতে সক্ষম হতে চাই। সুতরাং আমি আউটার বিন ডিরেক্টরিটি যুক্ত করার চেষ্টা করেছি (যেহেতু আমি উপসর্গীকৃত সংস্করণগুলি চাই) এবং উভয়ই আমার প্যাথএইচপি ডিরেক্টরিতে:

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

তবে, একই ত্রুটির ফলস্বরূপ। আমার কীভাবে টুলচেইনটি "ইনস্টল" করা উচিত যাতে আমি উবুন্টু রেপো থেকে ক্রস-সংকলকগুলি ব্যবহার করার মতোই আমি যেভাবে সর্বত্র থেকে টুলচেনটি ব্যবহার করতে পারি?


Dir ইনস্টল করতে CMAKE_C {XX} _FLAGS এর মাধ্যমে --sysroot সেট করার চেষ্টা করুন।
auselen

আমি - সিস্রুটের জন্য কিছু আলাদা পাথ চেষ্টা করেছি, কিন্তু তাতে কোনও লাভ হয়নি। সিস্রুটটির জন্য আমার কোন পথটি নির্দিষ্ট করা উচিত তা আমি সত্যই জানি না। টুলচেনের ডিরেক্টরি কাঠামো সম্পর্কিত উপরে দেখুন। এছাড়াও, কিছু গুগলিং ইঙ্গিত দেয় যে --sysroot libstdc ++ এর জন্য সহায়তা করে না।
pqvst

আমি / জিসিসি-লিনিয়ারো-আর্ম-লিনাক্স-জেনুয়াবিহ্ফ-রাস্পবিয়ান বা / জিসিসি-লিনিয়ারো-আর্ম-লিনাক্স-জেনুয়াবিহফ-রাস্পবিয়ান / আর্ম-লিনাক্স-জেনুয়াবিহফ
অ্যাসেলেন

এখানে লঞ্চপ্যাড.এন.সি.সি.সি.সি.আর্ম এম্বেড করুন এবং টার্বল ডাউনলোড করুন এবং নিষ্কাশন করুন। বিন dir আপনার পথ সেট ... সম্পন্ন। অথবা কোডসোস্ট্রি ডটকম এ যান (এখন মেন্টর গ্রাফিক্স) লাইট সংস্করণটি পাবেন, আনতার / বিজেড, বিন দিরের দিকে আপনার পথ নির্ধারণ করুন ... সম্পন্ন হয়েছে।
old_timer

উত্তর:


235

আমি আপনার টিউটোরিয়াল হিসাবে এটি লেখার চেষ্টা করব যাতে এটি অনুসরণ করা সহজ হয়ে যায়।

দ্রষ্টব্য: এই টিউটোরিয়ালটি কেবল পুরানো রাস্পবিয়ান চিত্রগুলির জন্য কাজ করে। ডেবিয়ান বুস্টার ভিত্তিক নতুন রাস্পবিয়ানদের জন্য এই থ্রেডটিতে নিম্নলিখিত পদ্ধতিটি কীভাবে দেখুন তা দেখুন: https://stackoverflow.com/a/58559140/869402

পূর্বশর্ত

আপনি শুরু করার আগে নিম্নলিখিতটি ইনস্টল করা আছে তা নিশ্চিত করা দরকার:

apt-get install git rsync cmake ia32-libs

একটি পাই সংকলন ক্রস করা যাক!

আপনার হোম ডিরেক্টরিতে একটি ফোল্ডার কল করা শুরু করুন raspberrypi

এই ফোল্ডারে যান এবং উপরে উল্লিখিত এনটিআরআই সরঞ্জাম ফোল্ডারটি নীচে টানুন:

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

আপনি 3 টির নীচেরটি ব্যবহার করতে চেয়েছিলেন gcc-linaro-arm-linux-gnueabihf-raspbian, যদি আমি ভুল না পড়ে।

আপনার হোম ডিরেক্টরিতে যান এবং যুক্ত করুন:

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

ফাইলটির শেষে নাম দেওয়া হয়েছে ~/.bashrc

এখন আপনি হয় লগ আউট এবং আবার লগ ইন করতে পারেন (অর্থাত্ আপনার টার্মিনাল সেশনটি পুনরায় চালু করতে পারেন), বা . ~/.bashrcএটি বেছে নিতে আপনার টার্মিনালে চালাতে পারেনPATH আপনার বর্তমান টার্মিনাল সেশনে সংযোজন ।

এখন, যাচাই করুন যে আপনি সংকলক অ্যাক্সেস করতে পারেন arm-linux-gnueabihf-gcc -v। আপনার এই জাতীয় কিছু পাওয়া উচিত:

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
 )

কিন্তু আরে! আমি তা করেছিলাম এবং লিবগুলি এখনও কাজ করে না!

আমরা এখনও শেষ করিনি! এখনও অবধি, আমরা কেবলমাত্র বেসিকগুলিই করেছি।

আপনার raspberrypiফোল্ডারে, নামক একটি ফোল্ডার তৈরি করুনrootfs

এখন আপনাকে এই নতুন তৈরি ফোল্ডারে পুরো /libএবং /usrডিরেক্টরিটি অনুলিপি করতে হবে । আমি সাধারণত আরপিআই চিত্রটি উপরে এনে আরএসসিএনসি এর মাধ্যমে অনুলিপি করে থাকি:

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

কোথায় 192.168.1.PI আপনার রাস্পবেরি পাই এর আইপি দ্বারা প্রতিস্থাপিত হয়।

এখন, আমাদের একটি cmakeকনফিগার ফাইল লিখতে হবে। ~/home/raspberrypi/pi.cmakeআপনার প্রিয় সম্পাদকটি খুলুন এবং নিম্নলিখিতটি সন্নিবেশ করুন:

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)

এখন আপনার cmakeঅতিরিক্ত প্রোগ্রামটি যুক্ত করে আপনার প্রোগ্রামগুলি সংকলন করতে সক্ষম হওয়া উচিত :-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake

চ্যামেক হ্যালো ওয়ার্ল্ড উদাহরণ ব্যবহার করে :

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
আমি আপনার টিউটোরিয়ালটি ধাপে ধাপে অনুসরণ করেছি এবং এখন আমি কোনও ত্রুটি ছাড়াই সংকলন করতে সক্ষম হয়েছি। ধন্যবাদ! চ্যামেক উদাহরণ সহ অতিরিক্ত ধন্যবাদ।
pqvst

1
এটি সাধারণ প্রকল্পগুলির জন্য ভাল কাজ করে তবে আমি ওপেনসিভিতে নির্ভর করে আমার সিএমএকেই প্রকল্পটি ক্রস-সংকলন করতে পারি না। আমি নিম্নলিখিত ত্রুটি পেয়েছি "/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/..lib/gcc/arm-linux-gnueabihf/4.7.2/../ .. /../../arm-linux-gnueabihf/bin/ld: সতর্কতা: libjpeg.so.8, /opt/rpi-rootfs/usr/lib/libopencv_highgui.so দ্বারা প্রয়োজনীয়, পাওয়া যায় নি (-rpath ব্যবহার করে চেষ্টা করুন বা -rpath-লিঙ্ক) "। চ্যানেল লিঙ্কারে "-Wl, -rpath, / opt / rpi-rootfs / usr / lib" পতাকাটি
প্রেরণেও মনে হচ্ছে

18
ia32-libsউবুন্টু 13.10 এ প্যাকেজটি উপলব্ধ নেই। আমি libc6-i386 lib32z1 lib32stdc++6পরিবর্তে ব্যবহার ।
বেন টি

2
দুর্দান্ত টিউটোরিয়াল উত্তর! অনুগ্রহ করুন :)
অ্যান্ড্রুডটনিচ

2
একটি পুরো টিউটোরিয়াল জন্য আপনাকে ধন্যবাদ! আপনি দয়া করে ব্যাখ্যা করতে পারেন পাই পাই মেশিন থেকে কেন / লিবিব / ইউএসআর ফোল্ডারগুলি অনুলিপি করা দরকার?
মার্সেলো

14

নতুন রাস্পবিয়ান দেবিয়ান বাস্টার ইমেজ এবং এআরএমভি 6 এর জন্য বিল্ডিং

@ স্টেনিগের উত্তরটি কেবল পুরানো রাস্পবিয়ান চিত্রগুলির জন্য কাজ করে। ডেবিয়ান বুস্টার ভিত্তিক সদ্য প্রকাশিত রাস্পবিয়ানের জন্য একটি আপডেটেড সরঞ্জামচেন দরকার:

ডেবিয়ান বাস্টারে জিসিসি সংকলক এবং গ্লিবসি সংস্করণ 8.3 এ আপডেট করা হয়েছিল। টুলচেনটি git://github.com/raspberrypi/tools.gitএখনও পুরানো জিসিসি 6 সংস্করণের উপর ভিত্তি করে রয়েছে। এর অর্থ হচ্ছে ব্যবহার করাgit://github.com/raspberrypi/tools.git করার ফলে অনেকগুলি সঙ্কলনের ত্রুটি ঘটবে।

এই টিউটোরিয়ালটি @ স্টেনইগ উত্তরের উপর ভিত্তি করে। ইন্টারনেটে অন্যান্য অনেকগুলি সমাধানের পাশাপাশি, এই টিউটোরিয়ালটি এআরএমভি 6 সিপিইউ-র ভিত্তিতে পুরানো রাস্পেরি পাই (এ, বি, বি +, জিরো ) সমর্থন করে। আরও দেখুন: জিসিসি 8 ক্রস সংকলক এআরএমভি 6 এর পরিবর্তে এআরএমভি 7 এক্সিকিউটযোগ্য

টুলচেন সেট আপ করুন

আপডেট হওয়া সরঞ্জামচয়ন সমন্বিত কোনও অফিসিয়াল গিট রিপোজিটরি নেই ( https://github.com/raspberrypi/tools/issues/102 দেখুন )।

আমি একটি নতুন গিথুব সংগ্রহশালা তৈরি করেছি যার মধ্যে জিআরসি 8 এবং আরও নতুন ভিত্তিতে এআরএমভি 6 এর জন্য বিল্ডিং এবং প্রাকম্পম্পাইলযুক্ত সরঞ্জামচেনগুলি অন্তর্ভুক্ত রয়েছে:

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

প্রকল্পের রেডমিমে উল্লিখিত হিসাবে, এই সরঞ্জামচেনটি পাওয়ার পদক্ষেপগুলি। আপনি নিজে এটি তৈরি করতেও পারেন (আরও তথ্যের জন্য README দেখুন)।

  1. সরঞ্জামচেনটি ডাউনলোড করুন:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
  1. এটি এক্সট্রাক্ট। দ্রষ্টব্য: টুলচেইনটি এতে /opt/cross-pi-gccঅবস্থান করতে হবে কারণ এটি অবস্থানটি স্বতন্ত্র নয়।
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
  1. তুমি পেরেছ! টুলচেনটি এখন/opt/cross-pi-gcc

  2. Ptionচ্ছিক, যোগ করে আপনার পথে টুলচেন যুক্ত করুন:

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

ফাইলটির শেষে নাম দেওয়া হয়েছে ~/.bashrc

এখন আপনি হয় লগ আউট এবং আবার লগ ইন করতে পারেন (অর্থাত্ আপনার টার্মিনাল সেশনটি পুনরায় চালু করতে পারেন), বা . ~/.bashrcএটি বেছে নিতে আপনার টার্মিনালে চালাতে পারেনPATH আপনার বর্তমান টার্মিনাল সেশনে সংযোজন ।

রাস্পবেরি পিআই থেকে গ্রন্থাগারগুলি পান

আপনার নিজস্ব রাস্পবেরি পাই এর জন্য ক্রস-সংকলন করতে, যার কয়েকটি কাস্টম লাইব্রেরি ইনস্টল থাকতে পারে, আপনাকে আপনার হোস্টে এই লাইব্রেরিগুলি নেওয়া দরকার।

একটি ফোল্ডার তৈরি করুন $HOME/raspberrypi। আপনার raspberrypiফোল্ডারে, নামক একটি ফোল্ডার তৈরি করুনrootfs

এখন আপনাকে এই নতুন তৈরি ফোল্ডারে পুরো /libএবং /usrডিরেক্টরিটি অনুলিপি করতে হবে । আমি সাধারণত আরপিআই চিত্রটি উপরে এনে আরএসসিএনসি এর মাধ্যমে অনুলিপি করে থাকি:

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

যেখানে192.168.1.PI আপনার রাস্পবেরি পাই এর আইপি দ্বারা প্রতিস্থাপিত হয়।

আপনার প্রকল্পটি সংকলন করতে সিএমকে ব্যবহার করুন

সিএমকে আপনার নিজের সরঞ্জামচেন নিতে বলার জন্য আপনার কাছে একটি সরঞ্জামচেন ফাইল থাকা দরকার যা সংকলক সেটিংস শুরু করে।

এই সরঞ্জামচেন ফাইলটি এখান থেকে পান: https://github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake

এখন আপনার cmakeঅতিরিক্ত পতাকাটি যুক্ত -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmakeকরে এবং সঠিক পরিবেশের ভেরিয়েবলগুলি সেট করে আপনার প্রোগ্রামগুলি সংকলন করতে সক্ষম হওয়া উচিত :

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 ..

হ্যালো ওয়ার্ল্ডের উদাহরণ এখানে দেখানো হয়েছে: https://github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh


আমি rsync চলাকালীন "অনিরাপদ সিমলিংক উপেক্ষা" বার্তা পেয়েছি। ঠিক আছে?
আলেকজান্ডার জারুবকিন

জরিমানা করা উচিত. এটি --safe-linksযুক্তিটির কারণে
স্টিফান প্রোফ্যান্টার

দুর্ভাগ্যক্রমে আমি এটি একটি রাস্পি 4 এর জন্য পরীক্ষা করতে পারি না, তবে যেহেতু বয়স্ক রস্পি থেকে এক্সিকিউটেবলগুলি সাধারণত নতুন রাস্পির উপরও মৃত্যুদন্ড কার্যকর করতে পারে তাই এটিও কাজ করা উচিত। যদি কেউ এটি পরীক্ষা করতে পারে তবে আমি বিবরণটি আপডেট করে খুশি
স্টিফান প্রোফ্যান্টার

হাই, সেখানে @ স্টেফানপ্রোফানটার, কেউ কীভাবে এই সরঞ্জামটিকে বাদ দিয়ে অন্য কোনও পথে রাখার জন্য স্বাধীন করে তোলা যায় /opt/cross-pi-gcc ?
নাস

দুর্ভাগ্যক্রমে না আমি ক্রস সংকলকগুলির বিশেষজ্ঞ নই। কারও কাছে যদি এই বিষয়ে আরও অন্তর্দৃষ্টি এবং ইনফস থাকে তবে আমি আমার রেপো আপডেট করে খুশি হব! হতে পারে আপনি একটি নতুন স্ট্যাকওভারফ্লো প্রশ্ন তৈরি করতে পারেন।
স্টিফান প্রোফান্টার

5

আমি কম্পাইলার (পাই নি x64সংস্করণ) ব্যবহার করতে sysrootপর্যন্ত আমি যোগ SET(CMAKE_SYSROOT $ENV{HOME}/raspberrypi/rootfs)করতে pi.cmake


আমি CMAKE_SYSROOT সেট ছাড়াই হ্যালো ওয়ার্ল্ডের উদাহরণটি চালাতে পারি, তবে একটি প্রকল্প যা একটি শেয়ার করা লাইব্রেরি ব্যবহার করে পাইকমেক ফাইলটি চেষ্টা করার সময় আমি লিঙ্কারের ত্রুটি পেয়েছিলাম libstdc ++। সুতরাং খুঁজে পাওয়া গেল না। আমি CMAKE_SYSROOT সেট করার পরে সবকিছু নির্দোষ কাজ করে worked
মাইকেল হিলবার্ট

4

উইন্ডোজ হোস্টের জন্য, আমি এই টিউটোরিয়ালটির অত্যন্ত সুপারিশ করতে চাই :

  • টুলচেনটি ডাউনলোড এবং ইনস্টল করুন
  • আপনার আরপিআই এর সাথে সায়ক্রোট সিঙ্ক করা / lib ডিরেক্টরি অন্তর্ভুক্ত
  • আপনার কোডটি সংকলন করুন
  • টেনে আনুন এবং আপনার RPi ব্যবহার করে এক্সিকিউটেবল ড্রপ SmarTTY
  • চালাও এটা!

বেশিও না কমও না!

রাস্পবেরি, বিগলবোন, কিউবিবোর্ড, এভিআর (আতেল) এবং আরও অনেক কিছুর জন্য প্রিল বিল্ট জিএনইউ সরঞ্জামচেনগুলি উপলব্ধ


প্রশ্নের মূল অংশের প্রথম লাইন থেকে সম্পাদনা করা হচ্ছিল "আমি আমার উবুন্টু মেশিনে কাজ করা রাস্পবেরি পাইয়ের জন্য ক্রস-সংকলন পাওয়ার চেষ্টা করছি" " এবং আমি শিরোনামে এটি স্পষ্ট করে দিয়েছি। এই উত্তরটি এখনও স্বাগত, তবে আপনি এটির উত্তরও দিতে চাইতে পারেন: raspberrypi.stackexchange.com/questions/27163/… যা আরও নির্দিষ্ট।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

4

আপনি ঝাঁকুনি ব্যবহার করতে পারেন । এটি জিসিসির চেয়ে দ্রুততর ছিল এবং এখন এটি বেশ স্থিতিশীল জিনিস। উত্সগুলি থেকে ঝাঁকুনি তৈরি করা অনেক সহজ ( আপনি বিল্ড প্রক্রিয়া চলাকালীন সত্যই কাপ কফি পান করতে পারেন )।

সংক্ষেপে:

  1. ঝনঝন বাইনারি (sudo apt-get ইনস্টল ক্ল্যাং) পান .. বা ডাউনলোড এবং বিল্ড করুন ( এখানে নির্দেশাবলী পড়ুন ) )
  2. আপনার রাস্পবেরি রুটফগুলি মাউন্ট করুন (এটি আসল রুটফগুলি এসএসএফএস বা কোনও চিত্রের মাধ্যমে বসানো হতে পারে)।
  3. আপনার কোডটি সংকলন করুন:

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

Ptionচ্ছিকভাবে আপনি লিগ্যাসি আর্ম-লিনাক্স-জেনুয়াবিহ্ফ বিনুটিস ব্যবহার করতে পারেন। তারপরে আপনি শেষে "-ফিউজ-এলডি = এলএলডি" পতাকাটি সরাতে পারেন।

নীচে আমার cmake সরঞ্জামচেন ফাইল।

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

আমি গিট: //github.com/raspberrypi/tools.git থেকে কোনও (মোটামুটি পুরানো) সরঞ্জামচেনের সাথে কিউটি 5 সংকলন করতে পারিনি। কনফিগার স্ক্রিপ্টটি "আর্কিটেকচার নির্ধারণ করতে পারে না" ত্রুটি সহ এবং ডিরেক্টরি অন্তর্ভুক্ত করার জন্য বৃহত্তর পাথ সমস্যার সাথে ব্যর্থ হয়ে পড়েছিল। আমার জন্য যা কাজ করেছিল তা ছিল লিনারো সরঞ্জামচেন ব্যবহার করা

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

আমি তাল মিলাতে চেষ্টা করছি

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

সাইস্রোটের প্রতিলিপিগুলি স্থির করতে ব্যর্থতা এখানে বর্ণিত হিসাবে সংজ্ঞায়িত প্রতীক ত্রুটির দিকে পরিচালিত করে: রাস্পবেরি পাইয়ের জন্য কিউটি লাইব্রেরি তৈরির ক্ষেত্রে একটি ত্রুটি আমার কাছে ঘটেছিল যখন আমি সরঞ্জামসীট থেকে ফিক্সক্যালিফাইডলিবারিপ্যাথস স্ক্রিপ্টটি চেষ্টা করেছি। Http://wiki.qt.io/RaspberryPi2EGLFS এ অন্য কিছুর বিস্তারিত বিবরণ দেওয়া হয়েছে । আমার কনফিগার সেটিংসটি ছিল:

। / ইউএসআর / লোকাল / রাস্প / সিস্রুট-ওপেনসোর্স-কনফার্ম-লাইসেন্স -উপটিমাইজড-কিউমেক-ট্রেড-এক্সপোর্ট-রিলেজ -মেক লাইবস-প্রিফিক্স / ইউএসআর / লোকাল / কিউটি 5 পিআই-হোস্টপ্রিফিক্স / ইউএসআর / লোকাল / কিউটি 5 পিআই

/ usr / স্থানীয় / রাস্প / সিস্রুটটি আমার স্থানীয় রাস্পবেরি পাই 3 রাস্পবিয়ান (জেসি) সিস্টেমের অনুলিপি এবং / usr / লোকাল / কিউটি 5 পিআই ক্রস সংকলিত QT এর পথ হওয়ায় এটি ডিভাইসে অনুলিপি করতে হবে। আপনি যখন আপনার সরঞ্জামচেনটি চয়ন করেন তখন জেসি জিসিসি ৪.৯.২ নিয়ে আসে সে বিষয়ে সচেতন থাকুন।


2

প্রাথমিক প্রশ্নটি বেশ কিছু সময় আগে পোস্ট করা হয়েছিল এবং এরই মধ্যে ডিবিয়ান বহুজাতিক সমর্থনের ক্ষেত্রে বিশাল অগ্রগতি করেছে।

ক্রস সংকলনের জন্য মাল্টিআরচ একটি দুর্দান্ত অর্জন!

সংক্ষেপে রাস্পবিয়ান জেসি ক্রস সংকলনের জন্য মাল্টিার্চ উপার্জনের জন্য নিম্নলিখিত পদক্ষেপগুলির প্রয়োজন:

  • আপনার উবুন্টু হোস্টটিতে একটি ক্রুট বা একটি এলএক্সসি পাত্রে ডেবিয়ান জেসি এমডি 64 ইনস্টল করুন।
  • বিদেশী আর্কিটেকচার আর্মশফ সক্ষম করুন।
  • এমডেবিয়ান সরঞ্জাম সংগ্রহস্থল থেকে ক্রস সংকলক ইনস্টল করুন।
  • একটি কাস্টম জিসিসি স্পেকস ফাইল লিখে ক্রস সংকলকটিকে (এটি ডিফল্টরূপে ARMv7-A এর জন্য কোড উত্পন্ন করবে) টুইঙ্ক করুন।
  • রাস্পবিয়ান সংগ্রহশালা থেকে আর্মফ লাইব্রেরি (libstdc ++ ইত্যাদি) ইনস্টল করুন।
  • আপনার উত্স কোড তৈরি করুন।

এটি যেহেতু অনেক কাজ তাই আমি উপরের সেটআপটি স্বয়ংক্রিয়ভাবে নিলাম। আপনি এখানে এটি সম্পর্কে পড়তে পারেন:

রাস্পবিয়ানদের জন্য ক্রস সংকলন


1

একটি সিডিপি স্টুডিও আইডিই উপলব্ধ রয়েছে যা উভয় উইন্ডো এবং লিনাক্স থেকে ক্রস সংকলন করে এবং বেশ সহজ স্থাপন করে এবং আপনি ইনস্টলেশনের সময় কেবল রাস্পবেরি সরঞ্জামচেন চেকবক্সটি পরীক্ষা করতে পারেন। (পিএস। এতে জিপিআইও এবং আই 2 সি সমর্থন রয়েছে তাই সেগুলি অ্যাক্সেস করার জন্য কোনও কোডের প্রয়োজন নেই)

রাস্পবেরি ব্যবহারের আইডিই ডেমোটি এখানে রয়েছে: https://youtu.be/4SVZ68sQz5U

এবং আপনি এখানে আইডিই ডাউনলোড করতে পারেন: https://cdpstudio.com/home-edition

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.