私はMSVCとdllファイル(opennurbsと呼ばれるライブラリ)でコンパイルされた静的C++ライブラリを持っています。私はmingwによってコンパイルされたプロジェクトでこのライブラリを使用する必要があります(私はQt作成者を使用していますが、プロジェクトはqtライブラリを使用していません)。だから、私は未解決の外部を持っている。私は名前のmanglingと問題を考える。 .libファイルを.aライブラリに変換するにはどうすればよいですか? nmコマンドを使用しようとしましたが、動作しません: "foo.dllにシンボルがありません"。 Extern "C"はC++ライブラリであるため動作しません。mingwでMSVC++ .libファイルを使用しています。名前のマングリング
答えて
一般的に言って、あるコンパイラでビルドされたC++ DLLは、別のコンパイラで構築されたプログラムからは使用できません。名前のマングリングは、問題のほんの一例にすぎません。例外処理、RTTI、メモリ管理、またはクラスレイアウト自体(特に多重継承や仮想継承)の互換性保証はありません。
ヒント(理想的にそれらのなし):あなたは完全に元の問題を回避し、いずれかのコンパイラ用のバイナリを入手するか、ソースコードからビルドする(すなわち、両方のDLLをビルドすることができた場合
- 最善の解決策はあるのあなたのケースではMinGWのクライアント)。
- 純粋なC APIとしてDLLのインターフェイスを公開することができたら、それを行います。例えば。 Win32は "C API"であり、C/C++だけでなく、あらゆる種類のコンパイラでもうまく機能します。
- DLL用に「オブジェクト指向」APIが必要な場合は、移植性は必要なく、必要な開発努力をする用意があります。
あなたの問題が何であるかを正確に理解することはむしろ困難ですが、1つの解決策は明らかです。 openNURBSコードは完全に許可されたライセンスで自由に入手できます。単にdownloadとそれをmingwで直接コンパイルする必要があります。
いずれにしても、これは実行可能な唯一のルートです。 C++には標準のバイナリインターフェイスはなく、各ツールには異なるバイナリインターフェイスがあります。これは、同じツールの異なるバージョン間でも異なる場合があります。さらに、MSVCコンパイルされたライブラリは、コンパイルされたコードとは異なるC++ランタイムライブラリに依存します。
したがって、要点は、mingwコンパイラによってコンパイルされたopenNURBSが必要なことです。しかし、ありがたいことに、ライブラリがソースとして配布されているために可能です。
最新バージョンは私を助けません。 OpenNURBSの私のバージョンはmingwとコンパイルされません。とりあえずありがとう!私は解決策を見つけることを願っています。 – flamingo
- 1. ネストされたマスターページの名前のマングリング
- 2. 静的な.libファイル内のMSVCリストシンボル
- 3. 名前マングリングが標準化されていない理由
- 4. Tomcatまたは軸でファイルをマングリングしていますか?
- 5. ハッシュテーブルを使用してファイルの名前を変更します。
- 6. CSSセレクタ名のマングリング?
- 7. は、delphiでlibファイルを使用します。 libファイルをインポートする方法
- 8. 他のファイルのリストの名前を使用して番号付きファイルの名前を変更します
- 9. 名前vbsを使用してデータベース内のレコードを使用しているファイル
- 10. 名前に変数を使用して新しいファイル名を作成する
- 11. csvファイルを使用してutf8の名前で画像をコピー/名前を変更します
- 12. グラムではifstreamを使用してファイルを読み込むの違い++とMSVC
- 13. powershellを使用してディレクトリ名でファイルの名前を変更するには
- 14. MinGWでスレッドを使用していますか?
- 15. Pythonの "private"名前のマングリングとインスタンスのvsクラスの属性
- 16. ImageMagickを使用してアップロードしたファイルの名前を変更
- 17. zipmoduleを使用してzipフォルダ内のファイルの名前を変更します
- 18. MinGW-w64を使用してWindows用のLAPACKをコンパイルします。
- 19. matlabを使ってファイルの名前を変更します
- 20. 古い名前のトラック番号を使用して複数のmp3ファイルの名前を変更
- 21. C#プログラムでの.libファイルの使用
- 22. Shoud実装ファイルに名前のない名前空間を使用しますか?
- 23. ファイルの名前を変更して正規表現を使用してファイル名を「クリーンアップ」しながらMove-Item
- 24. オープンハンドルを使用してファイルを削除または名前を変更する
- 25. PHPを使用してスペースでファイルの名前を変更する
- 26. Application.FileDialogを使用してVBAでファイルの名前を変更する
- 27. URL短縮:短い名前としてinodeを使用していますか?
- 28. MSVC 2010プロジェクトのすべてのファイルでビルド前イベントを実行する
- 29. JMimeMagic libを使用してCSVファイル用のmimetype text/plainを取得しているのはなぜですか?
- 30. g ++でDLLをビルドしてMSVCアプリケーションで使用する
静的ライブラリとDLLがあるとします。あれは正しいですか?つまり、2つの.libファイルがあることを意味します。 1つは、多くのコードを含むスタティックライブラリ用で、もう1つはインポートスタブを持つDLL用です。 –
あなたは気づくことができます(私のように!)、 'cl'と' mingw'の 'ABI'が違います。ごめんなさい。 – Lol4t0
Microsoftのコンパイラで作成されたバイナリファイルは、MinGW/GCCと互換性がありません。正常にリンクするには、ライブラリを再コンパイルする必要があります。 –