web-dev-qa-db-ja.com

WindowsからLinuxへのC ++クロスコンパイラ

WindowsからLinuxにクロスコンパイルするための使いやすいツールはありますか?

42
neo_x3m

crosstool-ngは、cygwinホストを使用したクロスコンパイラーの構築をサポートしています

概要:

  • 開発パッケージでcygwinをインストールします
  • ダウンロードcrosstool-ng
  • Tarballを抽出します(tar xvjf crosstool-ng*
  • ./configureを実行します
  • Configureがツールの欠落について不平を言ったら、cygwinのセットアップに戻って、対応するパッケージをインストールします(例:flexlibtoolncurses-devel)少なくとも次のものが必要です:
    • Devel/gperf
    • 開発/バイソン
    • Devel/byacc
    • 開発/ wget
    • 開発/パッチ
    • Devel/make(GNUバージョン)
    • Devel/automake 1.10以降
    • Libs/libncursesw10
    • Libs/libncursesw10-devel
  • make
  • make install
  • クロスコンパイラを構築するための新しいディレクトリを作成します。 /usr/src/cross-linux-gnu-root
  • レジストリでシステム全体の大文字と小文字の区別のサポートを有効にします( https://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect- to-the-filesystem#answer-84267
  • 大文字と小文字を区別してディレクトリをマウントします(例:mount c:/cygwin/usr/src/cross-linux-gnu-root /usr/src/cross-linux-gnu -o binary,posix=1
  • クロスコンパイラのビルドディレクトリ内から、ct-ng menuconfig
  • メニューで、ターゲットアーキテクチャをx86(おそらく)に設定し、サブアーキテクチャをi686に設定します( GCC 4.8の問題 を回避、osm0sisに感謝)、ターゲットカーネルをlinuxに設定します、およびCライブラリをglibcにターゲットし、C++コンパイラを有効にします。
  • make 4.0 issues を回避するには、Paths and misc optionsでEXPERIMENTALを有効にしてから、Companion tools(最上位)に移動し、Build some companion toolsを有効にしてからmake 3.81(osm0sisに感謝)
  • wgetには最新のkernel.org証明書に関する問題があるため、この受け入れられた回答で.wgetrcメソッドを使用してください: CygwinのHTTPS URLでwgetを実行するときに証明書エラーを修正するにはどうすればよいですか? (osm0sisに感謝)
  • 現在、さらなるエラーを避けるために3つのファイルパッチが必要です。
  • ct-ng build

もちろん、これによってVisual Studio内からLinuxアプリケーションをビルドできるようになるわけではありません。 (VS2010以降では、gccなどの他のツールチェーンを使用してビルドできますが、crosstool-ngでビルドされたクロスコンパイラーに加えて、適切なツールチェーンの説明が必要です)。ただし、g++-linux-gnuが機能するので、直接実行するか、Makefileを使用して実行できます。

注:クロスコンパイラの構築には長い時間がかかります。 osm0sisは、クロスコンパイラーのビルドに関するメモ(この回答を更新するために使用)とともに、 ここではビルド済みのgcc 4.8.1です を提供しています。

32
Ben Voigt

あなたの最善の策は、クロスプラットフォームを使用することですIDE Code :: Blocks のようにMSVCプロジェクトをインポートし、Linux用のMakefileを生成します。 Linux(必要に応じて同じプログラムでも)。

したがって、ワークフローは次のようになります。

Code, Compile, and debug on MSVC -> import into Code::Blocks & generate Makefile
-> test compile and debug with GCC
-> copy to Linux with Code::Blocks -> test compile & debug on Linux

おそらく少し鈍いですが、少なくともCode :: Blocksは、Makefilesなどの小さな詳細の多くを処理します。

2
supercheetah

Windowsで実行するために記述されたコードを取得し、Linuxで実行できるものを求めていますか?実際にそれを行うコンパイラはありませんが、おそらくあなたはWine( http://www.winehq.org/ )を探していますサンクアウト)。

編集:この回答では、コードがWindows API(Win32など)を使用していると想定しています。クロスプラットフォームで利用可能な標準C++とライブラリのみを使用している場合、他にも多くの答えがあります。

2
Austin Lamb

Windowsでコンパイルし、結果のバイナリを取得してLinuxマシンで実行できるコンパイラはないと思います。最善の策は、WindowsとLinuxの2つの開発環境をセットアップすることです。必要に応じてWindows環境でほとんどの開発とデバッグを行い、Linuxで頻繁にコンパイルおよびテストして、コードが本当にクロスプラットフォームであることを確認します。また、クロスプラットフォームのビルドシステムとテストフレームワークを使用することもできます。 cmakeGoogle Test をそれぞれ使用することをお勧めします。

0
Darryl

仮想化やクロスコンパイラを使用せずに、WindowsからLinuxにコンパイルしますが、coLinux経由でのみネイティブにコンパイルします。
Leave(再起動)ウィンドウなしでネイティブLinux実行可能ファイルを作成します。
C/C++でのLinux向けの協調Linuxによるコンパイル
ALT-TABによるWindowsとLinux間の最速の切り替え(再起動や再起動は不要)。

1。coLinuxのインストール( http://sourceforge.net/projects/colinux/files/latest/download?source=files
2.coLinuxルートファイルシステムイメージを使用:Ubuntu-9.04-1gb.7z( http://sourceforge.net/projects/colinux/files/Images%202.6.x%20Ubuntu/Ubuntu% 209.04 /
3.start coLinux
4。文字列「archive.ubuntu.com」を「old-releases.ubuntu.com」に変更します。
Shell> Sudo vi /etc/apt/sources.list
5。構成を更新します。
シェル> Sudo apt-get update
6。2つのソフトウェアパッケージをインストールして、プログラムをコンパイルできるようにします。
シェル> Sudo apt-get install build-essential
(c/c ++、gccコンパイラー)
シェル> Sudo apt-get install libmysqlclient15-dev
(mysql dev 5.1)
7。coLinuxからWindowsディレクトリへのアクセス
Shell> mount cofs0/mnt/-t cofs
Shell> cd/mnt
8。コンパイル
Shell> c ++ your.source.cc -o executable.name

0
Angel T