Windows では、多くの .dll に対応する静的な .lib が付属しています。私の理解では、対応する.libには基本的にLoadProcAddress呼び出しが含まれているため、プログラマーが自分で行う必要はありません。基本的に、時間の節約になります。Linuxに切り替えたとき、.dllを.soに、.libを.aに置き換えて、状況は同じであると想定していましたが、これが間違っていることを示している状況になり、何が原因かわかりません進行中:
.a/.so ペアとして提供されるライブラリを使用しています。.a に対してリンクしていましたが、生成されたバイナリに対して ldd を実行すると、対応する .so ファイルへの参照が含まれていませんでした。それで、私は .so ファイルに対してリンクしようとしましたが、驚いたことに、これはうまくいきました。さらに、結果のバイナリに対して ldd を実行すると、.so ファイルが表示されました。
だから、私は何が起こっているのかについて本当に混乱しています。Windows では、.dll ファイルにリンクしようとは思いません。また、Windows では、.dll ファイルに .lib が付随していて、コンパイル時に .lib に対してリンクした場合、実行時に対応する .dll に依存することが予想されます。この場合、これらはどちらも当てはまりません。
はい、Linux の共有オブジェクトに関する基本的なチュートリアルを読みましたが、読んだ内容はすべて、最初の仮定が正しかったことを示しているようです。ところで、私は Code::Blocks を IDE として使用していることに言及する必要がありますが、これは複雑なことを知っていますが、.so ファイルにリンクするように指示すると、単純に交換するだけではないことを 99% 確信しています。結果のバイナリが小さいため、.a ファイル。(加えて、ldd に関するビジネス全体...)
とにかく、事前に感謝します。