私は、Windows上のMinGW + MSYS32上にしか構築できない古いライブラリ(C++)を持っています。これから、GNU libtoolから生成された.aスタティックライブラリファイルを生成できます。私の主な開発はVisual Studio 2008で行われています.MinGWで作成したライブラリをVisual Studioでリンクしようとすると、外見が見つからないという不満があります。これは、C++シンボルのマングリングが行われ、.aファイルのwhatsと一致しないことが原因です。静的な.aファイルをVC++ライブラリ形式に変換する方法はありますか?MinGW .aからVC++ .libに変換する
答えて
シンボルが異なる場合、コンパイラは異なるABIを使用しており、コンパイルされたライブラリを "変換"することはできません。さまざまな方法でマージされた理由名は、異なるABIを使用してオブジェクトファイルから実行可能ファイルを構築します。 ABIは、引数の受け渡し方法、仮想関数テーブルの表現方法、例外の発生方法、基本データ型のサイズなど、さまざまな要素を定義しています。名前のマングリングもこれの一部であり、効率的で同じプラットフォーム上の他のABIとは異なるように慎重に選択されています。名前のマングリングが本当に異なるかどうかを確認する最も簡単な方法は、両方のコンパイラで基本タイプのみを使用してシンボルを見る(UNIXの場合はnm
を使用します。 Windowsのプログラマであり、私はそこでどのツールを使うべきかわかりません)。レイアウトとMinGWの(libstdc++)で使用される標準C++ライブラリおよびVisual Studio(Dinkumware)の実装は互換性がありません:
はWikipediaに基づいて、MinGWのはまた別のランタイムライブラリを使用しているようです。 2つのコンパイラ間のABIが同じであっても、使用される標準のC++ライブラリはありません。 ABIが同じ場合、あるコンパイラがそれぞれの他のコンパイラの標準ライブラリを使用するように、設定されたものを置き換える必要があります。既にコンパイルされたライブラリでこれを行う方法はありません。これが実行可能かどうかわかりません。
私はこれらの2つの異なるコンパイラの間で物事をリンクしようとするのは気にしません。代わりに、インプリメンテーションを共通のコンパイラに移植し、そこから実行する必要があります。
一般に、Cコードは異なるコンパイラから使用できることに注意してください。 MinGW GCCはVC .libファイルにリンクできますが、その逆はできません。 – rubenvb
defファイルを検索し、コマンドを実行します。 lib/machine:i386 /def:test.def インポートライブラリファイルを生成します。
- 1. VC++の変換
- 2. C++をVC++に変換する
- 3. * .dll * .a * .lib * .defとVisualStudioとgccの互換性
- 4. lib +ヘッダファイルをDLLに変換する
- 5. VC++コンパイラと型変換?
- 6. mingw:ラムダから関数ポインタへの無効な変換
- 7. ビルドするmozilla NSPR MinGwをVC++なしウィンドウで使用する
- 8. PDFからPDF/Aへの変換
- 9. VC++ 9 QTプロジェクト、Eclipse CDTに変換
- 10. ハスケル:どちらかParseErrorをaに変換する
- 11. PDFをPDF/AからJavaに変換する方法
- 12. VCとMinGWを使って作業する
- 13. C++静的ライブラリ - .libから.aファイルを作成する方法?
- 14. ghostscriptからpdf-a-iccファイルに変換できますか?
- 15. JNA load .a/.lib library
- 16. コードブロックMinGWと%n変換文字
- 17. vC++(例:IListPtr)のポインタをstd :: listに変換するには?
- 18. PHP DateTimeオブジェクトをフォーマットAからフォーマットBに変換します
- 19. vC++で文字列をdoubleに変換する
- 20. 'System :: String ^'を 'const char *'に変換するvC++
- 21. char *をVC++のLPWSTRに変換する方法は?
- 22. .aファイルを.dllに変換する
- 23. MFC(VC++)のconst char *をintに変換できませんか?
- 24. (Num a)=> aをHaskellでFloatに変換するには?
- 25. swig - C++をpythonに変換するlink systemd lib
- 26. MinGWに追加のインクルード/ libパスを追加
- 27. オプション[検証[E、A]]を検証[E、オプション[A]]に変換する
- 28. Kleisli [Try、I、A]をI => Aに変換する方法
- 29. プロローグ入力 `(a、z、b)`を `[a、z、b]`に変換する
- 30. VC++で変換せずにTextBox値を読み取る方法
いいえ、これはできません。バイナリをリンクするために使用するコンパイラで再コンパイルする必要があります。 –