Re: Incompatibility of libraries

From: Ricardo Eusebi <eusebi_at_physics.tamu.edu>
Date: Fri, 11 Mar 2011 11:45:08 -0600


Thanks, when doing that I get :

nm libTAMUWWSpecialTools.so libTAMUWWMEPATNtuple.so |grep G__cpp_reset_tagtable

000000000002bc80 T G__cpp_reset_tagtableLinkDef 0000000000010170 T G__cpp_reset_tagtableLinkDef

which if I understand correctly it suggest that my two identically named LinkDef files located in the different directories of each library are the cause of the conflict. However I can't seem to modify the name of the LinkDef file and still compile it. Any idea how to work this around ? (I'm using the CMSSW framework to compile)

Thanks,
Ricardo

On 3/11/11 11:09 AM, Axel Naumann wrote:
> Hi,
>
> this can be caused by both libraries containing a dictionary with the
> same name. I.e. they might have two different dictionaries (different
> content), but at creation time (rootcint) they were given the same file
> name (e.g. G__Dict.cxx).
>
> You should be able to find out by comparing the output of
>
> nm libTAMUWWSpecialTools.so libTAMUWWMEPATNtuple.so |grep
> G__cpp_reset_tagtable
>
> Cheers, Axel.
>
> Ricardo Eusebi wrote on 03/11/2011 05:13 PM:
>> Hi,
>> I'm working with ROOT 5.22/00d (branches/v5-22-00-patches_at_29532, May 19
>> 2010) on Linux 2.6.18-194.32.1.el5 2011 x86_64 x86_64 x86_64 GNU/Linux
>>
>> I have a conflict between libraries that I cannot solve. Specifically I
>> have the following two libraries, which (are supposed to) have
>> absolutely no dependence between each other:
>> -SpecialTools (which contains the class PhysicsProcess)
>> -MEPATNtuple (which contains the class METree)
>>
>>
>> I can load the library containing the PhysicsProcess class and works
>> just fine
>> root [0]
>> gSystem->Load("../../lib/slc5_ia32_gcc43/libTAMUWWSpecialTools.so")
>> (int)0
>> root [1] PhysicsProcess * proc
>> root [2]
>>
>> I can restart root and load the library containing the class METree and
>> works fine as well
>> root [0]
>> gSystem->Load("../../lib/slc5_ia32_gcc434/libTAMUWWMEPATNtuple.so")
>> (int)0
>> root [1] METree * me
>> root [2]
>>
>>
>> But when I load both of them I can only see the first library's classes
>> (true regardless of the order in which the libraries are loaded)
>>
>> root [0]
>> gSystem->Load("../../lib/slc5_ia32_gcc434/libTAMUWWSpecialTools.so")
>> (int)0
>> root [1] PhysicsProcess * proc
>> root [2]
>> gSystem->Load("../../lib/slc5_ia32_gcc434/libTAMUWWMEPATNtuple.so")
>> (int)0
>> root [3] METree * me
>> Error: Symbol METree is not defined in current scope (tmpfile):1:
>> Error: Symbol me is not defined in current scope (tmpfile):1:
>> (const int)0
>> *** Interpreter error recovered ***
>> root [4] PhysicsProcess * proc
>> root [5]
>>
>> So my question is very general, giving a conflict between libraries how
>> can I start debugging where in the libraries my problem is at ? If
>> there is an incompatibility between these libraries how can I pinpoint
>> the source of that error ?
>>
>>
>> Thanks,
>> Ricardo
>>
>>
>>
>

-- 
  ------------------------------------------------------------
| Ricardo Eusebi           | Office:  Mitchell Inst. M323    |
| High Energy Physics      | Phone : (979) 458 7907          |
| Texas A&M University     | email : eusebi_at_physics.tamu.edu |
  ------------------------------------------------------------
Received on Fri Mar 11 2011 - 18:45:15 CET

This archive was generated by hypermail 2.2.0 : Fri Mar 11 2011 - 23:50:01 CET