0

たとえば、フォルダ「V1」と「V2」にあるライブラリの2つのバージョンがあり、「v1.c」と「v2.c」の2つのCファイルがあります。「v1.c」はライブラリ「V1」を使用します。 "、および"v2.c"はライブラリ"V2"を使用します。「V1」と「V2」のインターフェースは同じであることに注意してください。私は試した:

g++ -c v1.c -o v1.o -I${V1}include
g++ -c v2.c -o v2.o -I${V2}include
g++ main.c -L${V1}lib v1.o -L${V2}lib v2.o -lsomething

最後のリンク手順で、2つのオブジェクトファイルの前に2つのライブラリパスを指定したことに注意してください。どうやら思った通りにはいかないようですが、意図を明確にするためだけに見せました。提案をありがとう。

4

1 に答える 1

1

最初に見つかった適切なシンボルを使用します。つまり、両方のライブラリに関数'bar'があり、ライブラリの名前が同じ場合、検索で最初に来るファイルの関数'bar'が使用されます。

異なるライブラリ(同じ名前のまま)のシンボルに異なる名前を付けるか、ライブラリに異なる名前を付けることができます。

シンボルの名前変更が役立つかどうかはまだわかりませんが、リンカーは最初に遭遇したライブラリに対してリンクし、他の必要なシンボルが含まれていないと文句を言う可能性があるためです。最も確実な方法は、ライブラリの名前を変更することです。

不明な点がある場合はコメントしてください。さらに説明します。

于 2013-02-15T10:33:59.290 に答える