4

変更されたglibcライブラリを使用しようとしています。glibcライブラリは私のコードに静的にリンクされています。my_libc_varglibcライブラリで新しい変数(それを呼びましょう)を宣言しました。externただし、(もちろんキーワードofcourseを使用して)その変数をプログラムに含めようとすると、undefined referenceエラーが発生します。どうすればこの問題を解決できますか?

glibcでは、変数は次のように宣言されます。

int my_libc_var;

一方、私のプログラムでは、次のように宣言されています。

extern int my_libc_var;
4

1 に答える 1

1

-fvisibility=hiddenコンパイル プロセスで、追加した変数が、または などのオプションを使用してコンパイルされたソース ファイルに含まれているかどうかを確認します-fvisibility=internal。これにより、シンボルが他のモジュールから参照できなくなります。

gcc を使用している限り、次のいずれかを使用して同様の動作が得られます。

#pragma GCC visibility push("hidden")

ソースファイルの先頭に置くことができます、または:

int var __attribute__ ((visibility ("hidden")));

シンボルの定義で(明らかに配置していませんが、回答を完了するためにここに配置しました)。

詳細については、gcc 属性の概要ページを参照してください。

于 2012-05-26T19:40:08.080 に答える