[Forwarded by A.S. on account of mail->news relay problem.]
To: pop-forum
Hi all,
I've managed to narrow down my problem. It only occurs when I use two
pre-compiled libraries. Heres the egcs++ command I use to link the
object files...
egcs++ -shared
-L/home/mhl/rti/RTI-1.3NGv6/Linux-rh62-i386-egcs-2.91.66-opt-mt/lib
-L/usr/i386-glibc21-linux external.o -o external.so -lRTI-NG -lfedtime
-lpthread -lrt -ldl
If I remove -lRTI-NG and -lfedtime the ioctl problem stops, other
combinations of the libraries produce bad systems calls (causing poplog
to crash). Could this be due to the way these two libraries have been
compiled?? Any ideas would be appreciated.
Sorry I can't be anymore specific, the libraries are part of the USDoD
RTI software and so I don't have (and can't get) source.
Cheers
Michael H Lees wrote:
> Hi all,
>
> I have managed to get external load to work for previous .so files. The
> .so file I'm trying to load now consists of the three C files compiled
> against other libraries. I was hoping that I was missing something
> obvious when trying to load.
>
> Normally if there is an error in the .so file ie. headers don't match up
> then it will specify which values/symbols it can't match. In the
> current example poplog fails to find any of the symbols, which is why I
> suspect it to be something to do with the way I'm loading the file??
>
> One interesting point which I have just come across is if I have
> mismatched one of the headers in the poplog file to the header in the
> .so file. The first time I compile the poplog file it complains about
> all the symbols/values ie. it can't find any of the functions. The
> second time I compile the file (in the same pop session) it only
> complains about the mismatched header??
>
> As a consequence I've noticed (with the mismatched header fixed) the
> file doesn't complain the second time I load??
>
> I've included a sample of the error messages below...
>
> The first time I compile (in Xemacs) I get something like,...
>
> : ;;; Compiling buffer rti.p
> ;;; Warning: can't open shared object rti.so
> ;;; (Inappropriate ioctl for device)
> ;;; Error: can't find value for symbol getAttributeHandle
> ;;; Error: can't find value for symbol getAttributeName
> ;;; Error: can't find value for symbol getObjectClassName
> ;;; Error: can't find value for symbol getObjectClassHandle
> ;;; Error: can't find value for symbol enableTimeRegulation
> ;;; Error: can't find value for symbol
> attributeOwnershipAcquisitionIfAvailable
> ;;; Error: can't find value for symbol
> unconditionalAttributeOwnershipDivesture
> ;;; Error: can't find value for symbol requestObjectAttributeValueUpdate
> ;;; Error: can't find value for symbol requestClassAttributeValueUpdate
> ;;; Error: can't find value for symbol deleteObjectInstance
> ;;; Error: can't find value for symbol updateAttributeValues
> ;;; Error: can't find value for symbol registerObjectInstance
> ;;; Error: can't find value for symbol subscribeObjectClassAttributes
> ;;; Error: can't find value for symbol publishObjectClass
> ;;; Error: can't find value for symbol resignFederationExecution
> ;;; Error: can't find value for symbol joinFederationExecution
> ;;; Error: can't find value for symbol destroyFederationExecution
> ;;; Error: can't find value for symbol createFederationExecution
>
> ;;; MISHAP - ERRORS ACCESSING EXTERNAL SYMBOLS (see above)
> ;;; FILE : /tmp/emacsxaF_9t LINE NUMBER: 432
> ;;; DOING : external_do_load exload_do_batch_load external
> pop_setpop_comp
> ;;; iler
>
>
> The second time with one function renamed ('t' missing),...
>
>
> : ;;; Compiling buffer rti.p
> ;;; Error: can't find value for symbol geAttributeHandle
>
> ;;; MISHAP - ERRORS ACCESSING EXTERNAL SYMBOLS (see above)
> ;;; FILE : /tmp/emacsxaFtFL LINE NUMBER: 432
> ;;; DOING : external_do_load exload_do_batch_load external
> pop_setpop_compiler
>
>
> If the 't' isn't missing then the second time I compile I get no errors?
> I've added a simple function into the .so file to test if the functions
> work after the second compile and they do work?!
>
> However if I add a printf statement to this simple test function I get a
> stack error...
>
> ;;; MISHAP - ste: STACK EMPTY (missing argument? missing result?)
> ;;; DOING : new_pop_ext_call pop_setpop_compiler
>
> I know I had 'printf' and 'cout' statements in my original simple
> example any ideas why it doesn't like them now?
>
> Cheers
>
> Mike
>
>
>
>
>
> Aaron Sloman wrote:
>
>> I have just noticed that the examples in REF external
>> use "exload".
>>
>> Have you tried that? Do those examples work?
>>
>> Is your .so file produced from a C program?
>>
>> Aaron
>
>
>
--
Mike
mhl@cs.nott.ac.uk
http://www.cs.nott.ac.uk/~mhl/
====
Aaron Sloman, ( http://www.cs.bham.ac.uk/~axs/ )
School of Computer Science, The University of Birmingham, B15 2TT, UK
EMAIL A.Sloman AT cs.bham.ac.uk (ReadATas@please !)
PAPERS: http://www.cs.bham.ac.uk/research/cogaff/ (And free book on Philosophy of AI)
FREE TOOLS: http://www.cs.bham.ac.uk/research/poplog/freepoplog.html
|