On Sat, Nov 03, 2012 at 01:59:18PM +0100, Peter Klett wrote: > > Hi All, > > I'm currently trying to get the VoIP plugin from RetroShare to work > under FreeBSD. > After this patch I was able to build it: > > --- plugins/VOIP/services/rsvoipitems.cc~ 2012-02-26 > 18:13:54.000000000 +0100 > +++ plugins/VOIP/services/rsvoipitems.cc 2012-10-29 > 12:53:56.650925587 +0100 > @@ -182,7 +182,7 @@ > ok &= setRawUInt32(data, tlvsize, &offset, flags); > ok &= setRawUInt32(data, tlvsize, &offset, data_size); > std::cerr << "data_size : " << data_size << std::endl; > - memcpy(data+offset,voip_data,data_size) ; > + memcpy(&((uint8_t*)data)[offset],voip_data,data_size) ; > offset += data_size ; > > if (offset != tlvsize) > > But I can't get RetroShare to load it: > > Cannot open plugin: /home/user/.retroshare/extensions/libVOIP.so: > Undefined symbol "_ZN9p3Service7receiveEP9RsRawItem" > > Now the symbol is part of the RetroShare binary: > > $ grep _ZN9p3Service7receiveEP9RsRawItem > work/trunk/retroshare-gui/src/RetroShare > Binary file work/trunk/retroshare-gui/src/RetroShare matches > > but somehow the symbols from the main binary do not get exported to the > plugin. > The FreeBSD man page for dlopen(3) states in the NOTES section > > ELF executables need to be linked using the -export-dynamic option to > ld(1) for symbols defined in the executable to become visible to > dlsym(). > > > So I rebuilt RetroShare with the -export-dynamic option, and the symbol > is part of the symbol table: > > $ objdump -t work/trunk/retroshare-gui/src/RetroShare | grep > _ZN9p3Service7receiveEP9RsRawItem > 0000000000809580 g F .text 00000000000000c7 > _ZN9p3Service7receiveEP9RsRawItem > > but still to no avail (same undefined symbol error). > My knowledge of ELF binaries is pretty sparse, so if someone has more > clues, I would appreciate sharing :)
The objdump -t dumps wrong table. You want to examine the output of -T AKA --dynamic-syms.
pgpPoCweZVYHj.pgp
Description: PGP signature