3

Interix を使用して Windows で C++ アプリケーションを構築しており、サード パーティのライセンス モジュールの機能を提供するために 3 つのオブジェクト ファイルをリンクする必要があります。サード パーティは、Visual Studio によってビルドされたオブジェクト ファイルを提供しています。GCCで使用するためにファイルを変換する方法はありますか? たとえば、名前マングリングを Visual Studio スタイルから GCC スタイルに変更した場合、それで十分でしょうか、それとも 2 つのオブジェクト ファイル形式の間に他に違いがありますか?

4

2 に答える 2

4

Windows には、標準化された C++ ABI (Application Binary Interface)がありません。ただし、C ABI はあります。これは、たとえば で使用される ABIKernel32.DLLであるため、すべての Windows プログラミング環境で理解されます。多くの場合、そのような DLL を生成することもできます。

この場合、C++ .obj ファイルは Visual Studio リンカーによってリンクされる必要があります。そのリンカーは間違いなく DLL ファイルを作成できます。extern "C"ライセンス機能をラップする関数を作成する必要があります。これらの関数が DLL からエクスポートされることを示すために追加__declspec(dllexport)します (Windows では、関数は既定で DLL に対してプライベートです)。

ヘッダーで、同じ関数を として宣言し__declspec(dllimport)ます。GCCもそれを理解しています。次に、新しく生成された DLL に対してリンクします。これにより、dllimport'ed シンボルが解決されます。

于 2013-04-02T06:40:37.743 に答える