gcc3+mozilla+java?
Michal Moskal
malekith w pld-linux.org
Wto, 22 Paź 2002, 13:06:32 CEST
On Tue, Oct 22, 2002 at 11:38:20AM +0200, Jakub Bogusz wrote:
> On Tue, Oct 22, 2002 at 11:18:06AM +0200, Artur Frysiak wrote:
> > On Mon, Oct 21, 2002 at 10:20:14PM +0200, Jakub Bogusz wrote:
> > > Da się coś z tym zrobić?
> > > Wszystko przez jeden symbol:
> > > nsServiceManager::GetGlobalServiceManager(nsIServiceManager **)
> > >
> > > przez gcc 2.9x kodowany jako
> > > GetGlobalServiceManager__16nsServiceManagerPP17nsIServiceManager
> > > przez gcc 3.2 jako
> > > _ZN16nsServiceManager23GetGlobalServiceManagerEPP17nsIServiceManager
> >
> > A mozilla była kompilowana z --enable-old-abi-wrapper ?
>
> Ze speca, czyli z --enable-old-abi-compat-wrappers.
>
> Ta opcja daje tylko symbole __builtin_vec_new, __builtin_vec_delete,
> __builtin_new, __builtin_delete, __pure_virtual (czyli te z
> libgcc/libsupc++, które się pozmieniały w 3.x).
>
> Natomiast ten, który sprawia problemy, jest z libxpcom.so. Ciekawe, że
> jest to jedyny używany symbol z bibliotek mozilli (oprócz niego są
> symbole z nspr, ale ta biblioteka na szczęście jest w C).
Popatrz na typ i nazwę tej funkcji. Zgaduje, że wywołanie wygląda tak:
nsIServiceManager *sm;
nsServiceManager::GetGlobalServiceManager(&sm);
po czym milony rzeczy w rodzaju:
nsSomeStrangeClass *ptr = sm->GetSomeStrangeClass(sm->BazQux());
Jeśli sposoby wywoływania metod się zmieniły (np. inny układ table
wirtualnych) to mamy oopsa...
W tym kontekście ,,tylko jeden symbol'' jest mylące...
--
: Michal Moskal ::::: malekith/at/pld-linux.org : GCS {C,UL}++++$ a? !tv
: PLD Linux ::::::: Wroclaw University, CS Dept : {E-,w}-- {b++,e}>+++ h
Więcej informacji o liście dyskusyjnej pld-devel-pl