C プログラミングでは、.so ファイルがヘッダー ファイルで宣言されているすべてのシンボルを提供している限り、オブジェクト ファイルは .so ファイルと正常にリンクできると考えていました。
foo.c、bar.h、および 2 つのライブラリ libbar.so.1 と libbar.so.2 があるとします。libbar.so.1 と libbar.so.2 の実装は全然違いますが、どちらも bar.h で宣言された関数を提供していれば問題ないと思います。
foo.o を libbar.so.1 にリンクし、実行可能ファイル foo.bin を作成しました。この実行可能ファイルは、libbar.so.1 が LD_LIBRARY_PATH にある場合に機能しました (もちろん、シンボリック リンクは libbar.so として作成されます)。しかし、シンボリック リンクを libbar.so.2 に変更すると、foo.bin が実行できず、これに不満がありました。 :
undefined symbol: _ZSt4cerr
libbar.so.1 は C++ でビルドされたライブラリですが、libbar.so.2 は AC でビルドされたライブラリです。foo.bin は純粋な C コード foo.c に基づいて構築されているため、foo.bin が libbar.so.1 自体でのみ意味を持つ C++ 関連のシンボルを必要とする理由がわかりません。