[fpc-pascal] Help needed with interfacing to C-object-files.
Koenraad Lelong
fpascal at brouwerij.homelinux.net
Thu Mar 10 21:21:38 CET 2005
Marc Santhoff wrote:
> Am Di, den 08.03.2005 schrieb Koenraad Lelong um 21:51:
>
>>Marc Santhoff wrote:
>>
>>>Am Mo, den 07.03.2005 schrieb Koenraad Lelong um 22:36:
>>>
>>>
>>>>Hi,
>>>>I'm trying to make an interface to a kind of library, but I'm stuck. Any
>>>>pointers are welcome.
>>>>There is a C-header file, but this is common for a number of C-modules.
>>>>If I translate (h2pas) this file, and use it, the linker tries to find
>>>>an o-file, which does not exist. Any suggestions how to handle this ?
>>>
>>>
>>>You've got to compile the C files to .o (gcc -c thesource.c) and then
>>>link them into your pascal unit ({$L thesource.o}). This way it should
>>>work, I'm using some C stuff like that.
>>>
>>>HTH,
>>>Marc
>>
>>Let me explain more : the header file is used in at least five
>>source-files, so compiling gives (at least) five .o files, but none with
>>the name of the header-file.
>>I was thinking that splitting that header-file in smaller files, each
>>for its own source could do the trick, but I'll have to check this
>>carefully. I had hoped for another suggestion.
>>Anyway, thanks for the response.
>
>
> Hm, I don't know, how the translated header looks in pascal, but if it's
> a complete unit itself you could try to {$L xxx} all resulting .o files
> in that unit. So any declared function and type should be found ... the
> other thing would be, if the sources from the 1-wire stuff form a
> dynamic library, then you simply have to tell the linker to pull this
> lib (.so) in
>
> fpc -k-l<thelibraryname without the.so-ending> ...
>
> should work and does for me, too. Or it needs an additional
> "-k-L/the/path/to/1-wire-lib". The only thing in your sources is to put
> the translated header in the uses clause.
>
> HTH,
> Marc
>
>
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
I should appologise. I don't know how it happened, maybe sand in my eyes
;-), but I seem to have misread the output. It wasn't ownet.o it didn't
find, but ownetu.o. When I saw this I realised there had to be something
wrong about my linking string. And indeed it was. After correcting this
linking went fine, except for a huge number of errors. After including
more o-files in ownet.pp, these were resolved.
Now I have only about 10 errors, in the main program. I'm working to
resolve these.
What I did want to ask is this : I mentioned adding more o-files in
ownet.pp. The files I had to add are used in the first o-files I
included, e.g. in ownetu.c ds2480.h/ds2480.c are used, so when I
included {$L ds2480.o} in ownet.pp the errors of ownetu disappeared.
My question : is the linker not smart enough to find out by itself where
to look for those missing object files ?
Is there a way I can avoid this ?
I hope I'm not making a fool of myself any more than I did already ;-).
Thanks,
Koenraad.
More information about the fpc-pascal
mailing list