Compiling a shared lib

Marcus Clyne maccaday@gmail.com
Fri Feb 12 07:12:00 GMT 2010


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.



More information about the Gcc-help mailing list