Re: Compiling a shared lib

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux