2009-09-09 15 views
13

" boost "(1.40.0)ソースコードをホームページ" www.boost.org "からダウンロードしました。 私はLinux(Ubuntu 9.04 Jaunty)をインストールし、私の "LINUX"マシンから "WINDOWS"バージョン(例: ".dll"、 "" .so "")へのブーストライブラリをコンパイルしようとしています。ブーストクロスコンパイル - "Linuxから" Windowsへ "

そして今、重要な質問:誰かが私は彼がすでにそれを行っている場合にのみ、彼を信頼する「はい」と言う場合

は(「LINUX」の「WINDOWS」BOOSTライブラリへコンパイルするために、ITが可能です前に私のために働く解決策を書くでしょう。その悲観主義のために申し訳ありませんが、私はこれを約3日間、これまで何も肯定的ではないようにしようとしています)

これまでのところ、私はこの方法でC++プログラムをコンパイルしました。 LinuxからLinuxへのコンパイルでは、 "gcc"(または "g ++")コンパイラを使用しました。 LinuxからWindowsへのコンパイルには、 "i586-mingw32msvc-gcc"(または "i568-mingw32msvc-g ++")コンパイラ( "Ubuntu"の "mingw32"パッケージに含まれています)を使用しています。

ので、この戦略は、私はブーストライブラリをコンパイルするためにも使用するように思っていると私は(ブーストホームページ上の「はじめに」の記事を読んだ後)これまでのところ、これを試してみました:

を--1。私は、 "ルート" ブーストソースコードディレクトリから "bootstrap.sh" を実行した:

./bootstrap.sh 

--2。それから、私は "project-config.jam"というファイル(gccを使用しています)の1つを変更しました:

using gcc : : i586-mingw32msvc-gcc ; 

- 3

./bjam stage 

しかし、その代わりに、私は、エラー・メッセージの多くを持ってブーストライブラリの「Windowsの」バージョンの作成:そして最後に「bjam」実行可能ファイルを実行します。

誰も私を助けることができますか?

ありがとうございます。

Petike

+4

いいえ、私は噛むでしょう:どうしてもあなたはこれをとにかくやりたいですか?なぜWindows上でWindows用のコンパイルをコンパイルしないのですか? – sbi

+13

@sbi、どうしてですか? Windowsが利用できない場合はどうなりますか?あなたがそれを買う余裕がないならどうしますか?単一のプラットフォームから異なるプラットフォーム用のコンパイルの利便性が必要な場合はどうでしょうか。 –

答えて

0

ブーストは、お使いのOSとあなたの現在のシステムに基づいて、現在のビルドについての仮定を行います。もしあなたがwin32ヘッダファイルを取得し、インクルードパスから全てのlinuxヘッダを削除してからビルドを試みたらどうなるでしょうか?

0

これは実際の回答ではありませんが、そうではありません。

完全に異なるプラットフォームへのクロスコンパイルは、通常、****の大きな苦痛です。

同じマシンにWindowsバイナリをビルドしようとしている場合、つまり、パッケージングのために、Windows、mingw、および適切なスクリプトを持つ仮想マシンを使用します。

さらに、ビルドでvmなどの自動テストを実行することもできます。これは大きな利点になるはずです。

+3

これは受け入れられません –

+3

それはうまく動作します。 「受け入れられる」か否か。 – AndreasT

+2

自動テストを実行できるということは、クロスコンパイルされた環境では実行できないことです。 – Malvineous

10

公式ドキュメントには、cross compilationに関するセクションがあります。あなたがやっていることで、二つの問題があるとの比較:

  1. あなたはのi586-mingw32msvc-gccのを指定し、指定する必要のi586-mingw32msvcを-G ++。前者はトリッキーなビットは、あなたがそこに1つの既知のバグがあることを

注ターゲット-OS必要=ウィンドウのC++のコードベース;-)

  • をコンパイルするために使用するCコンパイラ、ある - ときスタティックライブラリを作成すると、それらはranlibで渡されず、mingwリンカはこれについて特にうんざりしています。静的ライブラリを使用する予定がある場合は、手動でranlibを実行する必要があります。

  • +0

    "i586-mingw32msvc-g ++"と "target-os = windows"で試しましたが、何もビルドされておらず、次の20行のエラーがあります。 "Windows"(または別のソリューション?)からライブラリをビルドする必要があるようです。 – Petike

    +1

    私がもっと正確にしたものを釘付けにしようとしましょう。私はSVN HEADまたはBoostを持っていますが、これは私のuser-config.jamにあります: "gcc:m:i586-mingw32msvc-g ++;を使用しています。次に、「bjam toolset = gcc-m target-os = windows variant = debug -with-program_options」を実行します。コマンドが実行されるのを見て、最終的にstage/lib/libboost_program_options.libが作成されます。あなたはまったく同じことをしようとすることができますか?それがうまくいくならば、あなたの使っているエラーを提供してください。それが動作しない場合は、エラーも提供してください。私はエラーがSOに収まらないと思うので、http://codepad.orgを使用してください –

    +3

    それは最終的に私のために働く。 私は間違っていました。私は "スレッド"ライブラリをコンパイルしようとしましたが、 "すべて"ではありませんでした。スレッドは "pthreads"が見つからないためコンパイルできませんでした。私は追加しました: "threadapi = win32"とそれ以降はOKでした。 したがってコマンド全体は: "./bjam --layout =システムバリアント=リリーススレッド=マルチリンク=共有ランタイム - リンク=共有ツールセット= gccターゲット-OS =ウィンドウthreadapi = win32ステージ"です。 しかし、私はまだこれらのライブラリをコンパイルすることはできません。 -graph -graph_parallel -iostreams -math(一部) -python他の人がコンパイルすることができます。 – Petike

    3

    は、ここではLinuxからWindowsへのクロスビルドブーストに従うことが非常に簡単な手順があります:

    https://web.archive.org/web/20110604002004/http://www.vle-project.org/wiki/Cross_compilation_Win32

    +0

    これはまだ動作しています(少なくともエラーなしでビルドし、実行しようとしていません)! – Luminger

    +0

    +1それも私のために働いた! –

    +2

    これは、私のために、Ubuntu 12.04で1.48.0のブーストに対して働いたようです。 Elthariel、リンクが古くなった場合に備えて、そのリンクの内容を含めるように答えを拡大することをお勧めします。あなたがそうするなら、私はあなたにアップボートします。 –

    2

    これは私が使用するコマンドです。私はブースト1.46と1.49でそれらをテストしました。

    まず、/ usr/i686-w64-mingw32/bin内のコンパイラへのリンクを作成します。このスクリプトを実行できます。

    #!/bin/bash 
    
    binDir="/usr/bin" 
    destDir="/usr/i686-w64-mingw32/bin" 
    
    cd "$binDir" 
    mkdir -p "$destDir" 
    
    for name in $(ls i686-w64-mingw32*); do 
        newName=$(echo "$name" | sed 's/i686-w64-mingw32-//g') 
        if [ -f "$destDir/$newName" ]; then 
         rm "$destDir/$newName" 
        fi 
        ln -s "$binDir/$name" "$destDir/$newName" 
    done 
    

    次に、bjamをインストールします。 Ubuntuの/ Debianでは、rootになりを終了し、

    完了
    env PATH=/usr/i686-w64-mingw32/bin:$PATH bjam toolset=gcc target-os=windows variant=release threading=multi threadapi=win32 link=static --prefix=/usr/i686-w64-mingw32 -j 4 --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged install 
    

    を実行するには、パッケージ "libboost1.48-devの" に

    apt-get install libboost1.48-dev 
    

    を含まれています!

    +0

    あなたの答えから2年経ちましたが、この「autoRegex」は何ですか?どうして "sedの/ i686-w64-mingw32 - // g '"というの? –

    +0

    これは私のコンピュータに存在するスクリプトであり、sedだけです。私はあなたの提案に従って自分の答えを修正しました。 – Congelli501

    +0

    次のエラーが表示されます。無効なプロパティ ' win32':不明な機能 'threadapi'。 Boostライブラリはちょっと新しいバージョンです。 –

    関連する問題