私は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. MinGWツールでMSVCインポートライブラリを作成する
- 2. 名前がマングリングしないのはなぜですか?
- 3. WinMain()関数で名前マングリングを使用するのはなぜですか?
- 4. ネストされたマスターページの名前のマングリング
- 5. 静的な.libファイル内のMSVCリストシンボル
- 6. 名前マングリングが標準化されていない理由
- 7. Tomcatまたは軸でファイルをマングリングしていますか?
- 8. 名前のマングリングなしで継承されたメソッドをオーバーライド
- 9. CSSセレクタ名のマングリング?
- 10. ハッシュテーブルを使用してファイルの名前を変更します。
- 11. は、delphiでlibファイルを使用します。 libファイルをインポートする方法
- 12. 古い名前の一部を使用している間に、古い名前の一部を使用しながら、Pythonでファイル名を変更します。
- 13. 他のファイルのリストの名前を使用して番号付きファイルの名前を変更します
- 14. 名前vbsを使用してデータベース内のレコードを使用しているファイル
- 15. パス名を使用してファイルの名前を変更します。
- 16. Pyinstaller msvcという名前のモジュールがありません
- 17. csvファイルを使用してutf8の名前で画像をコピー/名前を変更します
- 18. 名前に変数を使用して新しいファイル名を作成する
- 19. Pythonの "private"名前のマングリングとインスタンスのvsクラスの属性
- 20. グラムではifstreamを使用してファイルを読み込むの違い++とMSVC
- 21. MinGWでスレッドを使用していますか?
- 22. Ubuntuでpyinstallerを使用すると、エラー:msvcという名前のモジュールがありません
- 23. Swiftを使用して別の名前でファイルを保存
- 24. powershellを使用してディレクトリ名でファイルの名前を変更するには
- 25. MinGW-w64を使用してWindows用のLAPACKをコンパイルします。
- 26. fifoファイル/名前付きパイプはいつ使用しますか?
- 27. Nodejsを使用してファイルの名前を変更する
- 28. ImageMagickを使用してアップロードしたファイルの名前を変更
- 29. zipmoduleを使用してzipフォルダ内のファイルの名前を変更します
- 30. セレンでautoitを使用して名前を付けて保存ダイアログボックスのファイル名を変更します。
静的ライブラリとDLLがあるとします。あれは正しいですか?つまり、2つの.libファイルがあることを意味します。 1つは、多くのコードを含むスタティックライブラリ用で、もう1つはインポートスタブを持つDLL用です。 –
あなたは気づくことができます(私のように!)、 'cl'と' mingw'の 'ABI'が違います。ごめんなさい。 – Lol4t0
Microsoftのコンパイラで作成されたバイナリファイルは、MinGW/GCCと互換性がありません。正常にリンクするには、ライブラリを再コンパイルする必要があります。 –