[fpc-pascal] Help needed with interfacing to C-object-files.
Koenraad Lelong
koen1 at brouwerij.homelinux.net
Wed Mar 9 22:27:25 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
>
I put some files on http://users.edpnet.be/~koenraad.
ulinuxgnu300.zip is the original file from DallasSemiconductor, with the
c-sources.
ownet.h.tar.gz contains the "problem" header file, in C en "raw" h2pas,
and two other header files used by temp.c, with their h2pas
counterparts, and finally the temp.c-file which I'm trying to implement
is FPC, as a testcase.
Finally temp1.pas.tar.gz contains my FPC-versions of the header-files,
cleaned up somewhat, so I could successfully compile. Of course this
needs more work to make it usefull.
If I compile without an o-path (-Fo), findtype.o and temp10.o are not
found and of course ownet.o. If I add a path to the files findtype.o and
temp10.o only ownet.o is not found, because it does not exist.
Let me say that I'm new to programming for Linux, and to programming
with FPC. I do use Delphi at work, so I know something of Pascal,
although I'm not an expert.
Thanks for any help,
Koenraad.
More information about the fpc-pascal
mailing list