On 02/12/2010 10:20 AM, Marcus Clyne wrote: > Andrew Haley wrote: >> On 02/12/2010 05:53 AM, Marcus Clyne wrote: >> >> >>> 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 >>> >> >> That looks right. Maybe your libcommon.so doesn't have the right name? >> Hard to say, you haven't provided enough details. >> > I've changed the name of 'libcommon.so' for the example, but it's > correct on the system. In any case, AFAIK, it shouldn't matter - the > error is appearing at compile-time (i.e. not load-time), so stage [2] is > failing (I forgot to make this clear). > I've successfully used the same procedure with other non-defined > functions which are in the main binary, and just included a header file > (as I did here). Well, like I said, you haven't provided enough details for us to be able to answer. What you've posted here looks correct, but we need a real test case that we can try. Andrew.