こんばんは
この制限されたシンボルの解決に関する問題の 1 つは、リンク時に発生します。
同じ名前の複数のシンボルが複数のライブラリに存在する可能性があり、リンカーは通常、探しているものと一致する最初に見つかったシンボルのみを取得します。
したがって、上記の S.Lott の例を使用すると、リンク エディターがシンボル "a_very_long_name" を検索し、その検索パス上にシンボル "a_very_long_name_thats_too_similar" を含むライブラリが見つかった場合、これが使用されます。これは、必要なシンボルを含むライブラリ、つまり "a_very_long_name" がコマンドで指定されている場合でも発生します。たとえば、ライブラリを次のように指定します。
-L/my/library/path -lmy_wrong_lib -lmy_correct_lib
リンク パス内の複数のシンボルを強制的に検索するコンパイラ オプション、またはより正確にはコンパイル時オプションがリンク エディターに渡されるようになりました。これらは通常、リンク時にエラーとして発生します。
さらに、gcc などの多くのコンパイラは、デフォルトでこのような動作をします。シンボルに対して複数の定義が見つかった場合に、リンク エディターが致命的なエラーを発生させずに続行できるようにするには、複数の定義を明示的に有効にする必要があります。
ところで、Clovis Tondo の本「 The C Answer Book 2nd ed. 」と併せて演習を行うことを強くお勧めします。
これを行うと、C が心に定着するのに非常に役立ちます。
HTH
乾杯、