Help with linker options
Nikolaus Dunn
nikdunn1979@gmail.com
Tue Nov 1 17:22:00 GMT 2016
On 10/31/2016 06:01 PM, Sven C. Dack wrote:
> On 31/10/16 17:16, Nikolaus Dunn wrote:
>> ...
>> Both libA and libB have the symbol:
>> _ZNSt15basic_stringbufIcSt11char_traitsIcE18tracking_allocatorIcEE8overflowEi
>>
>>
>> How do I get libA to use its own version of that symbol? I thought
>> that was what -Bsymbolic-functions was supposed to do.
>>
>> Thanks,
>> Nik
>>
> I don't think you can have the same symbol twice in a symbol table.
> -Bsymbolic only protects against symbol overwriting by the executable,
> but you still have the issue of having multiple definitions for the
> same symbol. You will have to use "-z muldefs" if you don't already
> use it, which however will only allow for multiple definitions, but
> the linker will then pick the first definition it finds and discards
> all the others. So I'm not sure if this is possible at all.
>
> You could try to undefine the symbol with "-u name" and thereby avoid
> it from being entered into the global symbol table. Or undefine the
> symbol for each libA and liB just before you link against them.
>
>
Thank you for your response. I think the issue I'm having is because
although I've statically linked against libstdc++, there are vtables
with the same name in more than one library. I suspect the application
is picking the first vtable that matches the class name and using that.
If so, is this behavior customizable?
If library A defines a class Foo and library B defines a class Foo and
the two are used in the same application, would it be possible to force
any code in library A that instantiates instances of Foo to use library
A's definition of the vtable and any code in library B that does the
same to use its definition of the vtable for Foo?
Is this possible?
I can't find much information on how the vtables themselves are loaded
in an application and how the value for vptr is established.
Thanks,
Nik
More information about the Gcc-help
mailing list