Compiling a shared lib

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


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).

Thanks,

Marcus.



More information about the Gcc-help mailing list