2009-05-17 14 views
6

CygwinやMinGWを使っても大丈夫ですが、32ビットではなく64ビットコードで終わる必要があります。これは、64ビットのC#からDLLを呼び出すためです。 64ビットのバイナリを作成するためのツールを設定するための参考資料や参考資料はありません。また、Cygwinのインストールに付属しているバージョン3ではなく、GCCがバージョン4であればいいでしょう。64ビットWindows用の既存のPOSIXコードをコンパイルするには?

代替方法は、プロセス間通信のいくつかの形式です。私はそれを研究しますが、私が上に示したのは私が本当に欲しいものです。

+0

私は、動作しようとしていたようなhttp://www.drangon.org/mingw/にMing64のウィンドウビルドを見つけました。ヘッダーファイルが見つからないなどの問題はありませんでしたが、cc1plus.exe(g ++によって呼び出された)がクラッシュしました。一口。 – Fantius

答えて

6

(直前にリリースされた)gcc-4.4.0に基づく64-bit MinGWは、おそらくあなたの最良の賭けです。 (sourceforge.net上のMinGW-w64プロジェクトは、それがmingw-w64.orgを使用することをお勧めしますmingw-w64.orgするために動いているので)

詳細な手順:
1. archive
2.どこかcygwinの下にそれを解凍ダウンロードしてください。私の場合は、トップレベルのcygwinのディレクトリはC:\cygwinですが、私はcygwinの下/mingwとして表示されている(mingwディレクトリにパッケージを抽出し、C:\cygwin\mingwに以下の内容になってしまった:

$ ls -l /mingw 
total 1 
drwxr-xr-x+ 2 user None 0 May 10 08:32 bin 
drwxr-xr-x+ 2 user None 0 May 10 05:45 include 
drwxr-xr-x+ 2 user None 0 May 10 08:30 info 
drwxr-xr-x+ 3 user None 0 May 10 08:30 lib 
drwxr-xr-x+ 3 user None 0 May 10 05:45 libexec 
drwxr-xr-x+ 4 user None 0 May 10 05:45 man 
lrwxrwxrwx 1 user None 17 May 17 17:20 mingw -> x86_64-pc-mingw32 
drwxr-xr-x+ 3 user None 0 May 10 04:16 share 
drwxr-xr-x+ 5 user None 0 May 10 04:18 x86_64-pc-mingw32 

3.ここで、いくつかのコンパイルC++コードの私が使用:。

// t.cc 
#include <vector> 
#include <string> 

using namespace std; 
int main() 
{ 
    vector<string> vs; 
    vs.push_back("abc"); 
} 

をそして、このようにそれをコンパイルします。最後に

$ /mingw/bin/x86_64-pc-mingw32-g++ t.cc 

4、VERIF結果はdumpbin /headers a.exeを実行して、WindowsのX/64で実行可能なY:

Microsoft (R) COFF/PE Dumper Version 7.00.9466 
Copyright (C) Microsoft Corporation. All rights reserved. 


Dump of file a.exe 

PE signature found 

File Type: EXECUTABLE IMAGE 

FILE HEADER VALUES 
      8664 machine (AMD64) 
       10 number of sections 
     4A10AF9F time date stamp Sun May 17 17:45:19 2009 
      ABA00 file pointer to symbol table 
      EC4 number of symbols 
       F0 size of optional header 
       27 characteristics 
        Relocations stripped 
        Executable 
        Line numbers stripped 
        Application can handle large (>2GB) addresses 
+0

これはLinuxパッケージですよね?私はWindowsでビルドして実行したいと思います。 – Fantius

+0

ああ、あなたが投稿したリンクのAutomated Buildsフォルダの下にあるWindowsビルドに気づいただけです。私はそれが私が必要とするものと正確になると思います。 – Fantius

+0

この作業には問題があります。私が以前にMinGW32をインストールした時、インストーラを使いました。これはインストーラではありません。binフォルダーを自分のパスに追加してg ++を見つけることができますが、g ++はヘッダーとライブラリを探す場所がわかりません。インストーラを使用したとき、すべてがうまくいった。 – Fantius

0

gcc docs言う:

以下の `-m」スイッチはAMD x86ベース上に上記に 他に支持されています64 64ビット環境のプロセッサ。

-m32 -m64 32ビットまたは64ビット環境用のコードを生成します。 32ビットの 環境ではint、long、ポインタ が32ビットに設定され、 がi386システムで実行されるコードが生成されます。 64ビットの 環境ではintが32ビットに設定され、 は64ビットに、ポインタは がAMDのx86-64 アーキテクチャのコードを生成します。通常は長いのWindows 64上で32ビットで、長い長い64ビットのポインタ・サイズ タイプですので、mingwのは本当に、そのようにしなければ

それは狂気あなたを駆動するために起こっていることを

注、私は、と思います。

+1

私はCygwinとMinGWでそれを試みましたが、どちらも64ビットモードがコンパイルされていないと訴えていました。それは、私がこれらのものの64ビット版を持っていないために起こりそうなことでした。それが私が見つけようとしているものです。 – Fantius

+1

--target = x86_64-pc-mingw32で構成されたmingw gccは、sizeof(long)== 4、sizeof(long long)== 8のコードを生成します –

関連する問題