2011-01-29 6 views
0

私は動的にリンクされたlibaryを使用するC++アプリケーションを持っています。アプリケーションとライブラリをターゲットに配置し、アプリケーションが実行されています。今私は図書館で何かを変えて図書館を作って、古い図書館を新しい図書館に置き換えました。C++の動的ライブラリ

私の質問は

  1. あるアプリケーションでは、アウトがrecompliingと再リンクを新しいlibararyかかりますか?

ありがとう!

答えて

1

はい、新しいライブラリが古いライブラリとABI互換である場合のみです。

あなたはそれについて多くの情報をウェブ上で見つけることができます。バイナリ互換性についてthis FAQをお読みになることをお勧めします。

0

はい、インターフェイスが変更されていない限りです。これは、動的リンクライブラリの1つの利点です。

0

はい。ライブラリーは実行時に動的リンカーによってロードされます。 ABIが保存されている限り(同じコンパイラとバージョン)、コードは再コンパイルする必要なくシームレスに新しいコードを使用します。

0

バイナリ互換性について話しているだけで、アプリケーションの再コンパイルと再リンクが必要かどうかについては、peoroの答えに記載されているリンクを参照する必要があります。

しかし、私は、あなたの質問の「アプリケーションが動作しています」という部分で少し混乱しています。ライブラリを置き換えたときに実際に実行されていることを意味する場合は、最初に再起動されたり、アプリケーションの別のインスタンスが起動されたりしない限り、新しいバージョンは使用されません(ただし、古いインスタンスは引き続き古いバージョン)。すべてのOSでアプリケーションで使用されているライブラリを置き換えることはできませんが、回避策があります。 Windowsでは、古いライブラリを上書きまたは削除することはできませんが、新しいバージョンをそこに置く前に移動または名前を変更することはできます。 Linuxでは古いバージョンを削除することができ、installコマンドを使用して新しいバージョンをコピーすると、自動的にそれが実行されます。しかし、古いバージョンは、アプリケーションが終了するまでファイルシステムから物理的に削除されません。それは見えません。

関連する問題