4
#include <gtk/gtk.h>

int main( int argc, char *argv[] )
{
    GtkWidget *window;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_show  (window);

    gtk_main ();

    return 0;
}

MSVCR80.dll生成された実行可能ファイルと同じディレクトリに のさまざまなバージョンを( 経由でcmake) 配置しようとしましたが、一致するものはありませんでした。

この種の問題に対する一般的な解決策はありますか?

アップデート

一部の回答では、VS Redist をインストールすることを推奨していますが、それがインストール済みの Visual Studio 9 に影響するかどうかはわかりません。誰か確認できますか?

実行可能ファイルのマニフェスト ファイル

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

マニフェスト ファイルには、 を使用する必要があると書かれているようですが、MSVCR90常に欠落が報告されるのはなぜMSVCR80.dllですか?

見つかった

それに数時間を費やした後、最終的に、次の設定が原因であることがわかりましたPATH

D:\MATLAB\R2007b\bin\win32

それを削除した後、すべて正常に動作します.しかし、なぜその設定は実行中の実行可能ファイルにmsvcr90からmsvcr80の使用に影響するのでしょうか???

4

4 に答える 4

1

トピックの質問に答えると、gtkアプリケーションでさえWindowsウィジェットの外観と動作をエミュレートしようとしないため、Microsoftライブラリが必要です。代わりに、gtkはネイティブAPIを使用してウィジェットを描画します。MinGWコンパイラでコンパイルする場合でも、プログラムにはMSVCRが必要です。

アイデアを得るためにmakefilesを調べてみてください、なぜリンクを正しくcmakeしないのですか?

于 2010-04-26T13:06:56.563 に答える
0

実行するには、 VSredistが必要です。ローダーはマニフェストを調べて依存関係が満たされているかどうかを確認するため、DLLをフォルダーに配置するだけでは機能しません。依存関係は、WinSxSディレクトリの特定の場所に存在する必要があります。

これはリンカーの問題ではなく、生成したEXEを実行できないだけです。

于 2010-04-26T13:30:45.250 に答える
0

1.1。

たぶん、CMakeは外部コンパイラを使用しています。あなたの場合-それはそうですMicrosoft Visual C++ 2005。また、ターゲットの実行可能ファイルはC ++ランタイムとリンクされています。dinamycallyつまり、プログラムを実行しているすべてのコンピューターにMicrosoft Visual C ++ 2005 SP1再頒布可能パッケージ(x86) パッケージをインストールする必要があります。

MSVCR = MicroSoft Visual C++ Runtime

このMSDN記事も参照してください:/ MD、/ MT、/ LD(ランタイムライブラリを使用)

2.2。

CMakeがGCCを使用していることを示すには:別のコンパイラを使用するにはどうすればよいですか?

3.3。

依存関係ウォーカーを使用して、依存関係がどの程度正確に存在しているかを把握してみてください

于 2010-04-26T13:05:36.393 に答える
0

このページを読むことをお勧めしますか? http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F

つまり、MSVCランタイムに静的にリンクするようにCMakeファイルを変更する必要があります。

(ちなみに、これはGtkとは関係ありません。すべてのプログラムはデフォルトでMSVCランタイムに対してリンクされます)

于 2010-04-26T13:15:51.880 に答える