11

ほとんどのプリコンパイル済み Windows バイナリは、MSYS+gcc ツールチェーンで作成されています。Visual C++ 2005/2008 と互換性のない MSVCRT ランタイムを使用します。

では、Cairo 1.6.4 (またはそれ以降) を Visual C++ のみでコンパイルする方法について説明します。依存関係 (png、zlib、pixman) を含みます。

4

7 に答える 7

18

Visual C++ で Cairo/Cairomm をビルドする手順は次のとおりです。

必須:

  • Visual C++ 2008 Express SP1 (現在 SDK が含まれています)
  • MSYS1.0

VC++ コマンド ライン ツールを使用するには、バッチ ファイル「vcvars32.bat」を実行する必要があります。

    C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vcvars32.bat

ZLib

http://www.zlib.net/から zlib123.zip をダウンロード (および解凍) します。

    CD zlib123
    nmake /f win32/Makefile.msc

    dir
        # zlib.lib は静的ライブラリです
        #
        # zdll.lib は zlib1.dll のインポート ライブラリです
        # zlib1.dll は共有ライブラリ

libpng

http://www.libpng.org/pub/png/libpng.htmlから lpng1231.zip をダウンロード (および解凍) します。

VC++ 9.0 コンパイラは、「これは安全でない可能性があります」という警告を大量に出します。それらを無視してください。これは MS セキュリティ パニックです (コードは正常です)。

    cd lpng1231\lpng1231 # 何らかの理由でこれは 2 階建てです

    nmake /f ../../lpng1231.nmake ZLIB_PATH=../zlib123

    dir
        # libpng.lib は静的ライブラリです
        #
        # dll は作成されていません

ピクマン

Pixman は Cairo の一部ですが、別のダウンロードです。

http://www.cairographics.org/releases/から pixman-0.12.0.tar.gz をダウンロード (および抽出) します。

MSYS を使用して、「tar -xvzf pixman*.tar.gz」で展開します。

Pixman と Cairo の両方に、Visual C++ コマンド ライン コンパイラ (cl) 用の Makefile がありますが、Gnu makefile と Unix ライクなツール (sed など) を使用します。これは、MSYS 内から make を実行する必要があることを意味します。

VC++ コマンド ライン ツールを有効にしてコマンド プロンプトを開きます ('cl /?' を試してください)。そのコマンド プロンプトを「C:\MSYS\1.0\MSYS.BAT」で MSYS プロンプトに変更します。

MSYS アイコンは使用しないでください。プロンプトが VC++ を認識するようになるためです。MSYS から .bat ファイルを実行することはできません。

ここから VC++ ツールが動作することを試してください: 'cl -?'

Gnu make も機能することを試してください: 「make -v」。

涼しい。

    cd (D: の代わりに /d/... を使用)
    CD pixman-0.12.0/pixman
    make -f Makefile.win32

これは、新しい x86 プロセッサ (Pentium 4 または Pentium M 以上: http://fi.wikipedia.org/wiki/SSE2 )を必要とする MMX および SSE2 最適化にデフォルト設定されます。

かなりの警告がありますが、成功しているようです。

    リリース
        # pixman-1.lib (カイロで必要な静的ライブラリ)

Cairo もコンパイルするために、VC++ のスパイスが効いた MSYS プロンプトにとどまります。

カイロ

http://www.cairographics.org/releases/から cairo-1.6.4.tar.gz をダウンロード (および抽出) します。

    CD
    CDカイロ-1.6.4

ここにある Makefile.win32 はほとんど問題ありませんが、Pixman のパスが組み込まれています。

変更された「Makefile-cairo.win32」を使用します。

    make -f ../Makefile-cairo.win32 CFG=リリース\
            PIXMAN_PATH=../../pixman-0.12.0 \
            LIBPNG_PATH=../../lpng1231\
            ZLIB_PATH=../../zlib123

(バックスラッシュを無視して、すべてを 1 行に記述します)

「'src/cairo-features.h' を作成する規則はありません。手動で準備したものを使用してください (Cairo > 1.6.4 では、単純に名前を変更できる 'src/cairo-features-win32.h' がある場合があります)。 :

    cp ../cairo-features.h src/

make コマンドを再試行します (上矢印で記憶されます)。

    ls ソース/リリース
        #
        # cairo-static.lib

カイロム (C++ API)

http://www.cairographics.org/releases/から cairomm-1.6.4.tar.gz をダウンロード (および抽出) します。

2008 用に (オープンおよびアップグレードを介して) 使用できる Visual C++ 2005 プロジェクトがあります。

    cairomm-1.6.4\MSCV_Net2005\cairomm\cairomm.vcproj

行う必要がある変更:

  • アクティブな構成を「リリース」に変更します

  • Cairomm-1.0 プロパティ (右クリック メニューあり)

        C++/一般/追加のインクルード ディレクトリ:
            ..\..\..\cairo-1.6.4\src (既存に追加)

        リンカー/一般/追加ライブラリ ディレクトリ:
            ..\..\..\cairo-1.6.4\src\release
            ..\..\..\lpng1231\lpng1231
            ..\..\..\zlib123

        リンカー/入力/追加の依存関係:   
            cairo-static.lib libpng.lib zlib.lib msimg32.lib
  • 最適化: 高速 FPU コード
            C++/コード生成/浮動小数点モデル
                速い

「cairomm-1.0」と「ビルド」を右クリックします。いくつかの警告があります。

    dir cairomm-1.6.4\MSVC_Net2005\cairomm\Release
        #
        # cairomm-1.0.lib
        # cairomm-1.0.dll
        # cairomm.def
于 2008-09-19T08:58:22.120 に答える
2

この手順は、現在のバージョンの imlib では機能しないようです。この質問を再質問する価値があるのでしょうか?

于 2010-03-09T22:31:53.087 に答える
1

ここをチェックしましたか: http://cairographics.org/visualstudio/ ? 「Visual C++ 2005/2008 と互換性のない MSCVRT ランタイムを使用しています」とはどういう意味ですか? あなたが抱えている正確な問題は何ですか?

于 2008-09-18T09:55:52.037 に答える
0

私はこれを行いましたが、すぐに作成できる指示はありません。たとえば、サポートが必要ないため、ビルドもかなり最小限に抑えられています。PNGファイルとSVGファイルでは、生成されたベクターグラフィックをメモリバッファーにレンダリングするために使用しました。

しかし、私が行ったことはconfig.h、UNIX / GNUビルドシステムのファイルやその他のファイルを読み、MSVCに適した独自のファイルを作成してから、適切なソースファイルを使用してプロジェクトを作成することでした。これを行うには、おそらくせいぜい数時間かかりますが、完了するとうまくいきます;)

編集:このページを参照してください。カイロを構築するためのMSVC 2003(7.1)プロジェクトがあります:http ://slinavlee.googlepages.com/

于 2008-09-18T19:44:00.983 に答える
0

MSYS+gcc ツールチェーンは古い MSVCRT ランタイム ライブラリ (現在は Windows に組み込まれています) を使用し、Visual C++ 2005/2008 は独自のものをもたらします。コードが複数のランタイムに依存してはならないことは、既知の事実です。ファイル ハンドル、メモリ ポインターなどを渡すと影響を受け、そのようなシナリオでは明らかにランダムなクラッシュが発生します。

私はこれに噛まれたことはありません。繰り返しになりますが、私はもはや Windows を対象としていません。しかし、私は解決策を試すことさえしないように十分に言われてきました.

機能した可能性があるのは、すべての依存関係をライブラリに静的にリンクすることです(たとえば、Cairomm)。静的ライブラリにはランタイムがバインドされていませんよね? しかし、私はこれを試しませんでした。私は実際にすべての構成要素の VC++ ビルドを機能させましたが、数日かかりました。

教えていただいたURLが見つかりませんでした。それ自体が奇妙です。私は「どこでも」見ました。繰り返しになりますが、これは Visual Studio 2003.NET 用なので、すでに 2 世代遅れています。

于 2008-09-18T19:41:43.050 に答える