私はVisual Studio 2010のプロジェクトでWindows用のCGALをビルドしようとしていますが、CGALにはGMPとMPFRのライブラリが必要です。しかし、それらをlib + dllバンドルとして提供していますが、それらを単一の.libファイルの形で静的にコンパイルしたいと思っています。cygwinを使用してWindows用静的ライブラリを構築する
これで、GMPとMPFRをWindows下の静的ライブラリとして構築しようとしています。私はhereとしてこの目的のためcygwinを使用しています。 configure
とmake
に電話した後、.a
の拡張子を持つlibsを出力して、.la
ファイルを追加しました。私はUnix用の静的ライブラリについてはあまり知らないので、別の拡張子を持つ.lib
と同じであることを示唆しました。私はそれを.libに変更し、私のプロジェクトにリンクしました。
最初の質問:そうだったのですか? .aと.libファイルは本当に同じですか?私はthisの質問を見ましたが、それが十分に役に立つとは思わなかった。その後
問題が発生した:私は
error LNK2019: unresolved external symbol ___getreent referenced in function ___gmp_default_reallocate
を持っていたいくつかのcygwinの機能がgmp.lib
を結果にリンクされていないように思えます。私が見つけたhere、そのgetreent
はlibcygwin.a
からエクスポートすることができます。そこで私はそれをlibcygwin.lib
にコピーし、私のプロジェクトにリンクしました。もちろん
error LNK2005: _strcpy already defined in libcygwin.lib(t-d001719.o) in libcmtd.lib(strcat.obj)
、私はこのライブラリ内で宣言およびVisual Studioから1と競合してstrcpy
ように思えるしているものの機能とどのように知ることができない。驚くことではないが、私は次のエラーを受け取りました。私が実際に起こりたいのは、gmp.lib
がこの機能を静的にリンクするのに十分なほどスマートになるということです。したがって、
第2の質問:GMPにライブラリ依存関係を強制的にリンクさせる方法は? または cygwinを使わずにWindows用のGMPを正しくビルドするには?
MSVC(または何でも)がMinGW(または誰でも)で構築された.libをリンクできないことがありますか?私は.libはコンパイラに依存しないですが。 – Mikhail
@Mikhailああ、そうじゃないよ。 MinGW GCCは '.a'ファイルを生成し、' .lib'は生成しません。 MSVCはGCCの出力形式については気にしませんが、なぜそれをリンクできるのでしょうか?一方、GCCはMSVCによって生成された32ビットの '.lib'ファイルにリンクすることができます。なぜなら、GCC/binutilsのいくつかの開発者はそれを可能にするのに十分気をつけていたからです。 – rubenvb
Windows上で静的な.libにGMPを構築する方法があることを意味していますか?それはかなり混乱しています。なぜcygwinで作られたgmp.aファイルをMSVCにリンクできますか? – Mikhail