特定の部分を c/c++ ライブラリとして生成するプログラムを開発しています。たとえば、ディレクトリ lib1、lib2、..、libN を作成します。ライブラリごとに c/c++ コード + Makefile を生成し、gcc/g++ + ld を使用して、最後にライブラリからコードを呼び出します。ここでの問題は、lib1 に関数fun
と libN もある場合fun
、libN から呼び出すときに lib1 が使用されることです。v4.7 までのさまざまなバージョンの gcc/g++ を試しました。
1 に答える
ここでの問題は、lib1 に関数 fun と libN もある場合、libN から fun を呼び出すときに lib1 が使用されることです。
おそらく、共有ライブラリについて話しているのであって、アーカイブ ライブラリについて話しているのではありません (複数定義されたシンボル エラーが発生する場合)。
はい、それが動作するはずの方法であり、常にUNIX で動作しています。キャッシングはそれとは何の関係もありません。
ELF プラットフォームを使用している場合は、 を使用して Windows のように動作させることができるかもしれませんが-Wl,-Bsymbolic
、デフォルトのシステム動作と戦うことになり、ラフな乗り心地や予期しない多くの落とし穴が予想されるはずです。fun
から公開する必要がない場合はlibX
、非表示のシンボルの可視性が役に立ちます。
lib1
、...のコードを生成しているlibN
のでlibX_fun
、fun
. これは、どこでも機能するため、移植性もはるかに高くなります。
アップデート:
関数名は、インターフェースの仕様上、実に楽しいものでなければなりません。
誰のインターフェース仕様によると?
明らかに、メイン プログラムとライブラリの両方を制御します。したがって、この問題を回避するためにインターフェイスの仕様を変更することができ、おそらく変更する必要があります。