kawasan_mt
2023年9月26日 12時03分
川島@MTです。いつもお世話になっております。
添付ファイルのタイマー動作評価プログラムをArmadillo-610で動作させたいのですが、
ATDE9でのcmakeのクロスコンパイル用の適用方法を知りたいです。
標準Install環境ではクロスコンパイル用のg++がインストールされていない様です。
別途Install作業が必要でしょうか?
また、クロスコンパイル以前に素のATDE9(Debian)と別環境(Ubuntu)との差異で気になるところがあります。
(何かしらのライブラリのinstallが必要?)
cmakeの際にSuccessの所がFailedになっている。
その為か、make後にエラーになります。
以下は抜粋引用。詳細は添付ファイルをご確認ください。
kawasan@cyobi4:~/tmp$ unzip periodic-timer-sample.zip kawasan@cyobi4:~/tmp$ cd periodic-timer-sample/ kawasan@cyobi4:~/tmp/periodic-timer-sample$ mkdir build kawasan@cyobi4:~/tmp/periodic-timer-sample$ cd build kawasan@cyobi4:~/tmp/periodic-timer-sample/build$ cmake .. -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success kawasan@cyobi4:~/tmp/periodic-timer-sample/build$ make →実行ファイルmainが生成される atmark@atde9:~/usr/src/apl$ unzip periodic-timer-sample.zip atmark@atde9:~/usr/src/apl$ cd periodic-timer-sample atmark@atde9:~/usr/src/apl/periodic-timer-sample$ mkdir build atmark@atde9:~/usr/src/apl/periodic-timer-sample$ cd build atmark@atde9:~/usr/src/apl/periodic-timer-sample/build$ cmake .. -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed atmark@atde9:~/usr/src/apl/periodic-timer-sample/build$ make Scanning dependencies of target main [ 50%] Building CXX object bench/CMakeFiles/main.dir/main.cpp.o [100%] Linking CXX executable main /usr/bin/ld: CMakeFiles/main.dir/main.cpp.o: in function `POSIXTimer<Callback>::stop()': main.cpp:(.text._ZN10POSIXTimerI8CallbackE4stopEv[_ZN10POSIXTimerI8CallbackE4stopEv]+0x25): undefined reference to `timer_delete' /usr/bin/ld: CMakeFiles/main.dir/main.cpp.o: in function `POSIXTimer<Callback>::start(Callback*, unsigned int)': main.cpp:(.text._ZN10POSIXTimerI8CallbackE5startEPS0_j[_ZN10POSIXTimerI8CallbackE5startEPS0_j]+0x7e): undefined reference to `timer_create' /usr/bin/ld: main.cpp:(.text._ZN10POSIXTimerI8CallbackE5startEPS0_j[_ZN10POSIXTimerI8CallbackE5startEPS0_j]+0x9c): undefined reference to `timer_settime' collect2: error: ld returned 1 exit status make[2]: *** [bench/CMakeFiles/main.dir/build.make:103: bench/main] エラー 1 make[1]: *** [CMakeFiles/Makefile2:113: bench/CMakeFiles/main.dir/all] エラー 2 make: *** [Makefile:103: all] エラー 2
お手数ですが、ご教授のほど、よろしくお願いします。
ファイル | ファイルの説明 |
---|---|
periodic-timer-sample.zip | タイマーサンプルC++プログラム |
log_ubuntu.txt | サンプル操作(Ubuntu) |
log_atde9.txt | サンプル操作(ATDE9 Debian) |
コメント
kawasan_mt
マルティネさん
川島@MTです。返信ありがとうございます。
> 起動はその対応で問題ないですが、別の OS で起動する場合は ATDE で直接にクロスコンパイルできなくなります。
> ATDE は qemu で arm のバイナリを実行できますので、使用したいコンテナを ATDE で起動して、その中に cmake や g++ をインストールすればいつもどおりにビルドできると思います。
> ビルド自体はクロスビルドより少し遅いですが、この程度のプロジェクトであればクロスビルドの環境を作る時間に比べたらすぐに使える物ができると思います。
docker (ubuntu 22.04)で試してみます。
よろしくお願いします。
kawasan_mt
マルティネさん
川島@MTです。
docker(ubuntu 22.04)でできました。
今件、クローズします。
以下、メモ。
「x86のLinux環境からdockerを利用してクロス環境を起動」で、欲しいイメージのWeb
https://hub.docker.com/layers/library/ubuntu/22.04/images/sha256-2589fe…
DIGEST値を指定してpull
atmark@atde9:~/usr/src/a610$ sudo docker pull ubuntu@sha256:2589fe6bcf90466564741ae0d8309d1323f33b6ec8a5d401a62d0b256bcc3c37 docker.io/library/ubuntu@sha256:2589fe6bcf90466564741ae0d8309d1323f33b6ec8a5d401a62d0b256bcc3c37: Pulling from library/ubuntu d79cf5fbd02b: Pull complete Digest: sha256:2589fe6bcf90466564741ae0d8309d1323f33b6ec8a5d401a62d0b256bcc3c37 Status: Downloaded newer image for ubuntu@sha256:2589fe6bcf90466564741ae0d8309d1323f33b6ec8a5d401a62d0b256bcc3c37 docker.io/library/ubuntu@sha256:2589fe6bcf90466564741ae0d8309d1323f33b6ec8a5d401a62d0b256bcc3c37 atmark@atde9:~/usr/src/a610$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu <none> 5edd8b11048d 6 weeks ago 55.3MB atmark@atde9:~/usr/src/a610$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES atmark@atde9:~/usr/src/a610$ sudo docker run --name ubuntu-arm -it 5edd8b11048d /bin/bash WARNING: The requested image's platform (linux/arm/v7) does not match the detected host platform (linux/amd64) and no specific platform was requested root@bfbd25b1f470:/# uname -a Linux bfbd25b1f470 5.10.0-25-amd64 #1 SMP Debian 5.10.191-1 (2023-08-16) armv7l armv7l armv7l GNU/Linux root@bfbd25b1f470:/# ldd --version ldd (Ubuntu GLIBC 2.35-0ubuntu3.3) 2.35 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Roland McGrath and Ulrich Drepper.
docker(ubuntu-arm)での環境構築メモ
root@bfbd25b1f470:/# apt update root@bfbd25b1f470:/# apt -y upgrade root@bfbd25b1f470:/# apt -y install build-essential gcc g++ make libtool texinfo dpkg-dev pkg-config root@bfbd25b1f470:/# apt -y install git cmake cmake-curses-gui cmake-gui curl wget p7zip-full
TPコンパイル
root@bfbd25b1f470:~/usr/src/periodic-timer-sample# ls -l total 36 -rw-rw-r-- 1 1000 1000 179 Jun 13 07:00 CMakeLists.txt -rw-rw-r-- 1 1000 1000 1068 Jun 13 07:00 LICENSE -rw-rw-r-- 1 1000 1000 208 Jun 13 07:00 README.md drwxrwxr-x 2 1000 1000 4096 Jun 15 03:07 _old -rw-rw-r-- 1 1000 1000 2445 Jun 15 03:09 analysis.py drwxrwxr-x 2 1000 1000 4096 Jun 13 07:00 bench drwxrwxr-x 2 1000 1000 4096 Jun 13 07:00 data drwxrwxr-x 5 1000 1000 4096 Jun 13 07:00 include drwxrwxr-x 3 1000 1000 4096 Jun 15 06:21 stats0 root@bfbd25b1f470:~/usr/src/periodic-timer-sample# mkdir build root@bfbd25b1f470:~/usr/src/periodic-timer-sample# cd build/ root@bfbd25b1f470:~/usr/src/periodic-timer-sample/build# cmake .. -- The C compiler identification is GNU 11.4.0 -- The CXX compiler identification is GNU 11.4.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Looking for pthread.h -- Looking for pthread.h - found -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success -- Found Threads: TRUE -- Configuring done -- Generating done -- Build files have been written to: /root/usr/src/periodic-timer-sample/build root@bfbd25b1f470:~/usr/src/periodic-timer-sample/build# make [ 50%] Building CXX object bench/CMakeFiles/main.dir/main.cpp.o In file included from /usr/include/c++/11/vector:72, from /root/usr/src/periodic-timer-sample/bench/main.cpp:14: /usr/include/c++/11/bits/vector.tcc: In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long int}; _Tp = long long int; _Alloc = std::allocator<long long int>]': /usr/include/c++/11/bits/vector.tcc:121:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >' changed in GCC 7.1 121 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/11/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {long long int}; _Tp = long long int; _Alloc = std::allocator<long long int>]': /usr/include/c++/11/bits/vector.tcc:426:7: note: parameter passing for argument of type 'std::vector<long long int>::iterator' changed in GCC 7.1 426 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ [100%] Linking CXX executable main [100%] Built target main root@bfbd25b1f470:~/usr/src/periodic-timer-sample/build# ls -l bench total 124 drwxr-xr-x 3 root root 4096 Sep 28 01:49 CMakeFiles -rw-r--r-- 1 root root 5789 Sep 28 01:49 Makefile -rw-r--r-- 1 root root 1255 Sep 28 01:49 cmake_install.cmake -rwxr-xr-x 1 root root 107232 Sep 28 01:49 main
Armadillo-610でmain実行 (プロンプト:#はABOS、c#はdocker(ubuntu))
# abos-ctrl podman-storage --status # abos-ctrl podman-storage --disk # vi /etc/atmark/containers/ubuntu.conf set_image ubuntu:22.04 add_args -it set_autostart no set_command /bin/bash # persist_file /etc/atmark/containers/ubuntu.conf # podman pull docker.io/ubuntu:22.04 # podman_start ubuntu # podman attach ubuntu c# mkdir ~/tmp c# cd ~/tmp {なんらかの手段でmainファイルを取得} c# chmod +x main c# main
stats.csvが生成できた。
at_dominique.m…
2023年9月26日 15時27分
川島さん
マルティネです。
> また、クロスコンパイル以前に素のATDE9(Debian)と別環境(Ubuntu)との差異で気になるところがあります。
> (何かしらのライブラリのinstallが必要?)
> cmakeの際にSuccessの所がFailedになっている。
> その為か、make後にエラーになります。
そこを先に回答させていただきます。
問題のtimer_delete または timer_create, timer_settime は glibc 2.34 で追加されましたが、ATDE9 (debian bullseye) の glibc は 2.31 のままです。
glibc だけを更新することはできませんので、この periodic-timer-sample をビルドするには新しい OS を使う必要があります。
(あるいは、プログラムがそれを使わないように修正もできます)
Armadillo Base OS で任意のコンテナを使えますので、新しい debian 又は ubuntu や alpine のコンテナを使えば問題なく使えます。
起動はその対応で問題ないですが、別の OS で起動する場合は ATDE で直接にクロスコンパイルできなくなります。
ATDE は qemu で arm のバイナリを実行できますので、使用したいコンテナを ATDE で起動して、その中に cmake や g++ をインストールすればいつもどおりにビルドできると思います。
ビルド自体はクロスビルドより少し遅いですが、この程度のプロジェクトであればクロスビルドの環境を作る時間に比べたらすぐに使える物ができると思います。
よろしくお願いします。