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