gccを使用しています。x86_64システム上で共有ライブラリを作成しようとしています。コード共有ライブラリのコンパイル中にエラーが発生しました
int myglob = 42;
int ml_func(int a, int b)
{
myglob += a;
return b + myglob;
}
はgcc -c -g code.c -o code.o
でそれをコンパイルしてからgcc -shared code.o -o libcode.so
さは、エラーがスローされます!
エラーは/usr/bin/ld: libconst.o: relocation R_X86_64_PC32 against symbol 'myglob' can not be used when making a shared object; recompile with -fPIC
です。
-fPICフラグでコンパイルしようとしましたが、同じエラーが発生します。
注:ライブラリでの読み込み時の移転を確認しようとしていますので、フラグ-fPIC
を使用してください。
は 'ライブラリーの外で使用myglob'のですか?静的にしようとしましたか? – dvhh
'gcc code.c -o libcode.so -shared'でコンパイルしても正常にコンパイルされますが、オブジェクトファイルを作成して共有ライブラリを作成しようとすると、エラーが発生します。 – ashish