2012-02-21 7 views
1

私は最近、Cヘッダファイル(.h)、ライブラリファイル(.lib)、ダイナミックライブラリ(.dll)で構成されるクローズドソースSDKを手に入れました。それらはMicrosoftのVisual C++を使用してコンパイルされました。しかし、私はMinGW(Windowsに移植されたGCC、プロジェクトになじみのない人)を使って自分のコードを書こうとしています。 ldは.libファイルにリンクできません。 VSコンパイルされたコードと私が書いているGCCコードの間に互換性ラッパーを書くことが可能かどうか疑問に思っていました。.libファイルの周りにGCC互換のラッパーを書く

+3

もしあなたがヘルカリアンの努力なしにこれを取り除くことができれば、私はショックを受けます。 – jason

+0

元のSDKには、おそらく5~10の機能しかありません。私は、異なるコンパイラが互換性のないものになっているのかどうか分かりません。 –

+0

違いはありません。言語仕様がコンパイラに任せている実装の詳細との違い、呼び出し規約との相違点などがあります。 – jason

答えて

1

ABIの不一致がありますか、またはオブジェクト形式とリンクしたくないだけですか?単なるリンクの問題であれば、関心のある機能を抽出し、逆アセンブルして、リンカが処理できるオブジェクトに再アセンブルすることができます。さらに簡単には、おそらくobjcopy(1)は両方の形式を話すことができますし、あなたを助けることができますか?

対処するABIの問題がある場合は、同じことを行うことができますが、関数呼び出しが機能するようにABIをサンクするためにシムレイヤーを追加します。そのレイヤーの複雑さと書き込みの難しさは、使用しようとしている関数のインターフェイスによって異なります。

コメントであまり落胆しないでください - それはソフトウェアなので、かなり多く何かが可能です。

+0

私はそれが不可能だと言っていませんでした。もちろん可能です。私はそれが簡単なら驚くだろうと言った。 – jason

+0

私の経験では、このようなことを行うには、分解ツールを新しいツールチェーンが処理できるものに戻すのに少し時間がかかりますが、それはそれです。 ABIをサンクする必要があるなら、それはもう一つの努力ですが、必ずしも難しいとは言えません。もちろん、va_list型を渡すかどうかによって異なります。 –

+0

この時点では、リンクしたくないようです。私は '.lib'ファイルで' ld.exe'を指していて、見つけられないと私に伝えます。これを数時間前から調べてみると、実際にファイルが表示されていないためではなく、有用なファイルが表示されないためです。しかし、訂正は大歓迎です。 –

関連する問題