Thread overview |
---|
January 05, 2005 Calling C function | ||||
---|---|---|---|---|
| ||||
Hi, I know it is possible to call a C function from D. It works on Linux. I don't have a very in depth knowledge of C and linking so please excuse my ignorence if I have missed something obvious. I have the following two files: ------------------------------ #file mylib.c int get_one() { return 1; } ------------------------------ ------------------------------ #file test.d extern (C) int get_one(); void main() { printf("Result: %d", get_one()); } ------------------------------ On Linux I compile with: gcc -c mylib.c Results in mylib.o Then compile and link the d code: dmd test.d mylib.o This works, no complaints and the output is correct. When I try to do this with the Microsoft compiler like: cl /c /TC mylib.c it produces a mylib.obj and then I run: dmd.exe test.d mylib.obj it complaints with the folowing message: C:\Documents and Settings\martijn\d>dmd test.obj mylib.obj c:\opt\dmd\bin\..\..\dm\bin\link.exe test+mylib,,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved mylib.obj Offset 00000H Record Type 004C Error 138: Module or Dictionary corrupt --- errorlevel 1 Has this someting to do with an import library? How do I get this to work? Thanks in advance, Martijn. |
January 05, 2005 Re: Calling C function | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tino | Microsoft uses COFF object format , Digital Mars uses OMF. Youll need to compile mylib.c with DMC ( dmc -c mylib.c ) , and then the rest of the command. Seems to be a source of many headaches , I would complain but DM is blazing fast i think OMF is partly a reason :). It also helps promote DMC so thats good too. Charlie "Tino" <mvandenboogaard@gmail.com> wrote in message news:crhrvl$6vg$1@digitaldaemon.com... > Hi, > > I know it is possible to call a C function from D. It works on Linux. I don't have a very in depth knowledge of C and linking so please excuse my ignorence if I have missed something obvious. > > > I have the following two files: > > ------------------------------ > #file mylib.c > int get_one() > { > return 1; > } > ------------------------------ > > ------------------------------ > #file test.d > > extern (C) int get_one(); > > void main() > { > printf("Result: %d", get_one()); > } > ------------------------------ > > On Linux I compile with: > gcc -c mylib.c > > Results in mylib.o > > Then compile and link the d code: > dmd test.d mylib.o > > This works, no complaints and the output is correct. > > When I try to do this with the Microsoft compiler like: > cl /c /TC mylib.c > > it produces a mylib.obj > > and then I run: > dmd.exe test.d mylib.obj > > it complaints with the folowing message: > C:\Documents and Settings\martijn\d>dmd test.obj mylib.obj > c:\opt\dmd\bin\..\..\dm\bin\link.exe test+mylib,,,user32+kernel32/noi; > OPTLINK (R) for Win32 Release 7.50B1 > Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved > > mylib.obj Offset 00000H Record Type 004C > Error 138: Module or Dictionary corrupt > --- errorlevel 1 > > Has this someting to do with an import library? How do I get this to work? > > Thanks in advance, > > Martijn. |
January 06, 2005 Re: Calling C function | ||||
---|---|---|---|---|
| ||||
Posted in reply to Charles | Indeed that works! Thanks Charles. Learned something new on this beautiful day!
Charles wrote:
> Microsoft uses COFF object format , Digital Mars uses OMF. Youll need to
> compile mylib.c with DMC ( dmc -c mylib.c ) , and then the rest of the
> command.
>
> Seems to be a source of many headaches , I would complain but DM is blazing
> fast i think OMF is partly a reason :). It also helps promote DMC so thats
> good too.
>
> Charlie
|
Copyright © 1999-2021 by the D Language Foundation