This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Compiling a shared lib problems


Hi,

note : I've sent this to the GCC mailing list, but since I think it's related to ld options, I've also posted it here.

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]