Hi, I am trying to compile following code: ===lib.c==== extern int foo(); int bar() { int j = foo(); return j; } ========== ===add.c=== static int i = 0; int foo() { __asm__("mov 42, %ax"); __asm__("mov %ax, i"); return i; } ========== gcc -fPIC -c -o lib.o lib.c gcc -fPIC -c -o add.o add.c gcc -shared lib.o add.o -o lib.so /usr/bin/ld: add.o: relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC I thought that is due static declaration but it removing don't solves the problem. Is this expected behavior? If yes, can somebody explain? Thanks, Dzianis