Hi,
I'm trying to compile a shared library, but am having problems.
I have one main binary, which will load one or several shared libraries
that all use a common set of functions. The functions common to all the
shared libraries I would like to store either in another shared library,
which the shared libraries themselves load, or (preferably) in the main
binary itself.
I'm using the following commands for compilation (simplified):
[1] gcc -Wall -fPIC -o shared.o -c file.c
[2] gcc -shared -o shared.so shared.o
The error message I'm getting is:
shared.o: relocation R_X86_64_PC32 against undefined symbol `my_func'
can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
Where my_func is one of the common functions that I want to define
outside the shared library. I get this both when my_func is defined in
the main binary, and when it is defined in another shared object
(libcommon), and I add the following to [2]
-L/path/to/libcommon/dir -lcommon
I've also tried adding
-Wl,--dynamic-list=/path/to/dynamic/list
to [2] (with the dyn list containing my_func)
Can anyone tell me where I'm going wrong and what I need to do? I feel
like I need to add something extra in the linking stage, but I'm not
sure what.
Thanks in advance,
Marcus.