2013-05-15 16 views
5

私はにMinGW64を使用してGDAL-1.10.0 (http://trac.osgeo.org/gdal/wiki/DownloadSource)を構築しようとしていた( http://sourceforge.net/projects/mingwbuilds/files/host-windows/ からx64-4.8.0リリース - POSIX-SEH-rev2.7z )。私は問題なしで 標準MinGW(32ビット)バージョンの下でgdal-1.10.0をコンパイルしました。リンクエラー(MinGWの-ビルド)

IはにMinGW64に切り替えなければならない理由はよく ような他の特徴を、標準的な32ビットMinGWの分布 がstd::threadようなC++ 11個の機能をサポートしていない、及び(Iが疑わしい)ことです。しかし、私は私に何かについて

undefined reference to '__imp_GetACP' 

(または異なる装飾の名前私はにMinGW64/mingwのビルドの から32ビットのバリアントを使用している場合)を伝える最後にリンクエラーが発生します。ところで、私は の64ビット、32ビット、seh、sjljを含むmingw64の異なるバージョンを試しましたが、すべてがGetACP()について同じエラーを出しました。

私はいくつかの宿題をやったと同様のコンパイルタスクのためのいくつかの命令を見つけました: http://www.gaia-gis.it/spatialite-3.0.0-BETA/mingw64_how_to.html#env 上記のウェブサイトによると、彼らが、問題はWOW64で を行う必要があり、WindowsのDLLファイルの正しいバージョンがあることができないことを示唆しているようです ウィンドウは、32ビットまたは の64ビットアプリケーションが呼び出しを行うかどうかに応じて自動的に判断します。これはおそらくmingw64の問題です。 コンパイラgccは64ビットですが、msysは32ビットであるためです。

しかし、32ビット版も試してみたので、上記のように説明していないようです。 エラーです。 GetACP()、 へのすべての呼び出しをコメントするために、私は汚い方法で試してみました。なぜなら、私はコードページとそのすべてを自分の目的のために気にしないからです。 奇妙なことに、コンパイルはOKです(新鮮なソースで、GetACP()がコメントアウトされているだけです)。ただし、同じリンクエラーは引き続き報告されます。私はlibkernel32.alibiconv.alibフォルダにあり、上記のブログの指示に従って、dllのコピーを c:\windows\system32からコピーし、適切な名前を付けてmingwサブフォルダに配置することを確認しました。リンクエラーが残ります。これは成功することなくこれに約2日を費やしてハッキングを止めたところです。私はなぜソースコード全体が関数への単一の呼び出しを含んでいないのか理解できず、私はまだリンクエラーを取得しています。

gdalとmingw64の間でこの問題が発生した原因について、誰でも説明できますか? とそれを修正する方法はありますか?

また、mingw64についての一般的な質問は、実際に posix関数をサポートできるのでしょうか? x64-4.8.0-release-posix-seh-rev2.7zのようなパッケージ名が表示されますが、MinGWの人々は は完全なposixをサポートしないと言っています。

P.S. 私はこれをWindows Server 2008 R2、64-bitでテストしています。


更新:(mingwの-ビルド)にMinGW64下GDAL-1.10.0を構築するための 完全な手順は以下のとおりです。

その後
$./configure 

、 編集GDALmake。opt、GDAL_ROOTを検索し、cygwinドライブフォーマットをdos/mingwフォーマットに置き換えます。 変更:

GDAL_ROOT = /d/temp/build/gdal-1.10.0 

GDAL_ROOT = d:/temp/build/gdal-1.10.0 

に置き換え

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) 

最後に

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) -liconv 

、と

$ make && make install && cp apps/*.exe /usr/local/bin/ 

答えて

4

私は誤って同じ問題に遭遇しました。 多分これはMinGWのバグか悪いの設定ファイルですが、解決策は、リンカのフラグの終わりに -liconvを追加することで、例えば、

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) -liconv 

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) 

を置き換えますGDALmake.optファイル(ファイル内のGetACPをMingwディレクトリで検索すると見つかりました)

+0

これは優れています。 x64-4.8.1-release-posix-seh-rev0(mingw-builds)を使用してテストされています。注:GDALmake.optにはすでに-liconvがあったようです。しかし、どういうわけかMinGW64の下では取り上げられませんでした(mingw-buildsごとに)。 – tinlyx

+0

なぜこのバグが発生するのですか? –

関連する問題