私は大学のコンピュータにSSHアカウントを持っていて、私のC ++ 11コードと互換性のないgcc 4.4.7でのみコンパイルできます(ソフトウェアをインストール/更新する権限がありません)。マイコンピュータにDebianがありますが、DebianでコンパイルしたプログラムはSolarisと互換性がありません。
Solarisで動作するようにDebianでソースコードをコンパイルできますか?それとも私の問題に対する解決策はありますか?
答え1
DebianコンピュータにVirtualBox(または他の仮想マシンソフトウェア)をインストールして実行できます。それ。 Oracle(サプライヤー)から提供ダウンロード。
大学のコンピュータが互換性がある場合(x86ベースのような)、ローカルで実行可能ファイルをコンパイルして他のコンピュータで使用できます。
答え2
Thomas Dickeyが投稿したように何が欲しいですか?はクロスコンパイラ。
彼らはそうではありません硬いしかし、それを設定して正しく設定したままにすることは非常に退屈です。たくさん正しい実行可能ファイルを構築するには、ターゲットシステムへの依存関係を考慮する必要があります。
これらの依存関係には何がありますか?私の頭の上から右:
- まず、ターゲットシステムは次のようになります。ㅏホスティング環境したがって、クロスコンパイラは、ターゲットシステムが実際に
main()
関数が呼び出されるポイントに到達できるように、実行可能な起動コード/バイナリを提供する必要があります。 - たくさんあります実装定義「どのくらい古い」などのターゲットシステムに関する詳細
long
。これらは異なる可能性があるため、より良い言葉が不足しているので、そうする必要があります。実装する。一般に、これは少なくともみんなターゲットシステムのヘッダファイルは「実装の一部」です。あなたに必要なものと必要ないものを決めるのは、せいぜい退屈な仕事です。だからみんな捕まえてね?まあ、これは心配する必要がある依存関係の数を増やします。 - これでコンパイルできますが、それはできません。協会ターゲットシステムライブラリはありません(上記の#1に関連していますが、もっと必要です)。理論的にはターゲットシステムと接続できますが、変化のないライブラリおよびターゲットシステムなし動的図書館、いいえみんなクロスコンパイラで生成されたバイナリをターゲットシステムで実行しようとすると、「シンボルが見つからない」エラーが原因で失敗しないかどうかは確かではありません。
したがって、クロスコンパイラを生成するには、ターゲットシステムのヘッダ、ライブラリ、および起動バイナリ/コードが必要です。これが設定されたら、次のことを行う必要があります。維持するIt - ターゲットシステムがクロスコンパイラに影響を与えるようにパッチされている場合は、これらの変更をコンパイラに複製する必要があります。パッチ「123456」またはRPM「abc」がクロスコンパイラに影響するかどうかを確認するにはどうすればよいですか?
私はたくさん逃したかもしれません。
ターゲットシステムがこのようなので、誰もクロスコンパイラを使用しない理由は明らかです。シンプルx86ハードウェアでLinux/Solaris/Windows/BSDなどのインスタンスを作成し、ターゲットシステムが困難な場合(SPARCのSolarisなど)、そのターゲットをコンパイルする必要があるほとんどすべての人が低コスト互換ハードウェアを購入するのはなぜですか?コンパイルに使用されます。