質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

1159閲覧

[Linux] amd64アーキテクチャ上でarm64アーキテクチャのソースコードをコンパイルする方法

samidare_chan

総合スコア18

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

1クリップ

投稿2023/10/13 13:04

編集2023/10/14 00:25

質問内容

タイトル通りなのですがamd64アーキテクチャ上でarm64アーキテクチャのソースコードをコンパイルする方法が知りたいです。
自分は今ラズベリーパイで実行できるソフトを作りたいのですが、ラズパイ上でコンパイルするとCPU性能の関係でコンパイルに時間がかかります、そこでUbuntu(amd64)上のPCでコンパイルした実行ファイルをラズパイに転送してそこで実行したのですが以下のエラー出てしまい解決方法わかりません
行ったこと5番目が一番近いと思うのですが、どうやるのでしょうか?

知りたいこと

1.ラズパイ4(arm64)で実行する実行ファイルをubuntu(amd64)上でコンパイルしてラズパイ4(arm64)で実行する方法が知りたい.。
2.そもそもコンパイル時間が性能上の関係でかかるから別のパソコンでコンパイルをかけるという行為はナンセンスなのかどうか?正しい行為で一般的なのか知りたい

環境

実行環境: ラズベリーパイ4 OS: ubuntu server for rasberry pi (arm64)
コンパイル環境: ubuntu (amd64)
言語: C++
利用ライブラリ: cpprectsdk,openssl

参考サイト

参考サイト OSファイル:https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-10-10/
参考サイト エラーについて:https://askubuntu.com/questions/470796/fatal-error-sys-cdefs-h-no-such-file-or-directory
参考サイトaarch64-linux-gnu-gccの64bit版を導入:https://eel3.hatenablog.com/entry/2022/08/15/180203

行ったこと

1,/usr/include/cpprest/details/basic_types.h:17:10: fatal error: fstream: のついて調べましたが有益な情報が得られません。
2,チャットGPTにてコマンドを知りましたどうやらクロスコンパイルならぬ行為をするみたいです。
3,参考サイトのzipファイルを落としてきてlibデータを自分のpcに入れようとしたいのですが.img等拡張子のため断念
4,arm64のライブラリをインストールすることを試みましたがアーキテクチャの不一致でできませんでした。
5,sudo apt-get install gcc-aarch64-linux-gnuを導入後以下のエラー

$ make aarch64-linux-gnu-gcc obj/Main.o -o bin/program -lcpprest -lssl -lcrypto -pthread /usr/bin/aarch64-linux-gnu-ld: Scrt1.o が見つかりません: そのようなファイルやディレクトリはありません /usr/bin/aarch64-linux-gnu-ld: crti.o が見つかりません: そのようなファイルやディレクトリはありません /usr/bin/aarch64-linux-gnu-ld: obj/Main.o: Relocations in generic ELF (EM: 62) 上記同じため省略 /usr/bin/aarch64-linux-gnu-ld: obj/Main.o: error adding symbols: file in wrong format collect2: error: ld returned 1 exit status make: *** [Makefile:14: bin/program] エラー 1
$ sudo dpkg -i libcpprest2.10_2.10.15-1_arm64.deb [sudo] shigurechan のパスワード: dpkg: アーカイブ libcpprest2.10_2.10.15-1_arm64.deb の処理中にエラーが発生しました (--install): パッケージアーキテクチャ (arm64) がシステム (amd64) と一致しません 処理中にエラーが発生しました: libcpprest2.10_2.10.15-1_arm64.deb

5,ラズパイからlibを引っ張ってきて実験しましたがなんか同じエラー出ます。

発生しているエラーと実行したコマンド

terminal

1$ arm-linux-gnueabihf-g++ -o program Main.cpp -I/usr/include -L/usr/lib -lcpprest -lssl -lcrypto -lboost_system -lboost_thread -lpthread 2In file included from /usr/include/cpprest/asyncrt_utils.h:16, 3 from /usr/include/cpprest/http_client.h:47, 4 from Main.cpp:1: 5/usr/include/cpprest/details/basic_types.h:17:10: fatal error: fstream: そのようなファイルやディレクトリはありません 6 17 | #include <fstream> 7 | ^~~~~~~~~ 8compilation terminated. 9

ソースコード

cpp

1#include <cpprest/http_client.h> 2#include <cpprest/oauth2.h> 3using namespace web; 4using namespace web::http; 5using namespace web::http::client; 6using namespace web::http::oauth2; 7 8int main() { 9 // アクセストークンを取得済みであることを前提としています 10 utility::string_t accessToken = "XXXXXX"; 11 12 // Mastodon APIのエンドポイント 13 utility::string_t apiEndpoint = "https://mstdn.jp/api/v1/instance"; 14 15 try { 16 http_client client(apiEndpoint); 17 http_request request(methods::GET); 18 19 20// Authorizationヘッダーを設定 21 request.headers().add("Authorization", "Bearer " + accessToken); 22 23 client.request(request).then([](http_response response) { 24 if (response.status_code() == status_codes::OK) { 25 // レスポンスを処理 26 std::cout<<response.to_string()<<std::endl; 27 json::value responseData = response.extract_json().get(); 28 // フォロワー情報などを抽出 29 // responseDataから必要な情報を取得 30 } else 31 { 32 // エラーハンドリング 33 std::wcerr << L"APIリクエストエラー: " << response.status_code() << std::endl; 34 } 35 }).wait(); 36 } catch (const std::exception &e) { 37 std::wcerr << e.what() << std::endl; 38 } 39 40 return 0; 41} 42
ikedas👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cas

2023/10/18 06:59

ライブラリとインクルードパスがホストになってる気がするのですがあっていますか?
guest

回答1

0

ここは素直に、ラズパイ クロスコンパイル、でぐぐれば、いろいろ記事が出てくると思いますよ

投稿2023/10/13 20:02

y_waiwai

総合スコア88163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

samidare_chan

2023/10/14 00:22

質問ですが以下のサイトを参考に64bit版を入れましたが以下のエラーが出ます。 ``` $ make aarch64-linux-gnu-gcc obj/Main.o -o bin/program -lcpprest -lssl -lcrypto -pthread /usr/bin/aarch64-linux-gnu-ld: Scrt1.o が見つかりません: そのようなファイルやディレクトリはありません /usr/bin/aarch64-linux-gnu-ld: crti.o が見つかりません: そのようなファイルやディレクトリはありません /usr/bin/aarch64-linux-gnu-ld: obj/Main.o: Relocations in generic ELF (EM: 62) 上記と同じ為省略 /usr/bin/aarch64-linux-gnu-ld: obj/Main.o: error adding symbols: file in wrong format collect2: error: ld returned 1 exit status make: *** [Makefile:14: bin/program] エラー 1 ``` 参考サイト:https://eel3.hatenablog.com/entry/2022/08/15/180203
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問