Thread overview
Q: how to get C code to work in D?
Jun 12, 2007
Hoenir
Jun 12, 2007
BCS
Jun 12, 2007
Myron Alexander
Jun 12, 2007
Hoenir
Jun 12, 2007
BCS
Jun 12, 2007
Hoenir
Jun 12, 2007
Hoenir
Jun 12, 2007
BCS
Jun 13, 2007
Daniel Keep
Jun 13, 2007
Hoenir
June 12, 2007
I got a C file (it's a library, so in C you would create a static library and link it to another program) I want to use in D.
I already created the necessary d file as described here:
http://www.digitalmars.com/d/interfaceToC.html

But how do I link the C code? dmd isn't able to compile C files.

I know how to get a dll working (creating C dll, corresponding lib with implib and then adding that lib to the command line of dmd) but I want it to be statically linked like in C.
Any hints?
June 12, 2007
Reply to Hoenir,

> I got a C file (it's a library, so in C you would create a static
> library and link it to another program) I want to use in D.
> I already created the necessary d file as described here:
> http://www.digitalmars.com/d/interfaceToC.html
> But how do I link the C code? dmd isn't able to compile C files.
> 
> I know how to get a dll working (creating C dll, corresponding lib
> with
> implib and then adding that lib to the command line of dmd) but I want
> it to be statically linked like in C.
> Any hints?

Download dmc (the digital mars C compiler) and build the lib with that. Then pass the .obj's or .lib to dmd with everything else. Or use link.exe directly.


June 12, 2007
BCS wrote:
> Reply to Hoenir,
> 
>> I got a C file (it's a library, so in C you would create a static
>> library and link it to another program) I want to use in D.
>> I already created the necessary d file as described here:
>> http://www.digitalmars.com/d/interfaceToC.html
>> But how do I link the C code? dmd isn't able to compile C files.
>>
>> I know how to get a dll working (creating C dll, corresponding lib
>> with
>> implib and then adding that lib to the command line of dmd) but I want
>> it to be statically linked like in C.
>> Any hints?
> 
> Download dmc (the digital mars C compiler) and build the lib with that. Then pass the .obj's or .lib to dmd with everything else. Or use link.exe directly.
> 
> 

If you already have an obj file but it won't link, it could be that the obj format is not compatible with the obj format used by digital mars, in which case you can use one of the converters. I do not know the digital mars tool-chain but I am sure that someone else has had to solve this problem so it will be in the archives.

Regards,

Myron.
June 12, 2007
BCS schrieb:
> Reply to Hoenir,
> 
>> I got a C file (it's a library, so in C you would create a static
>> library and link it to another program) I want to use in D.
>> I already created the necessary d file as described here:
>> http://www.digitalmars.com/d/interfaceToC.html
>> But how do I link the C code? dmd isn't able to compile C files.
>>
>> I know how to get a dll working (creating C dll, corresponding lib
>> with
>> implib and then adding that lib to the command line of dmd) but I want
>> it to be statically linked like in C.
>> Any hints?
> 
> Download dmc (the digital mars C compiler) and build the lib with that. Then pass the .obj's or .lib to dmd with everything else. Or use link.exe directly.
> 
> 
I don't know which switches to use to generate a static library with dmc.
I tried
	dmc -c main.c
	dmd test.d main.obj
which didn't fix the Symbol Undefined error.
June 12, 2007
Reply to Hoenir,

> BCS schrieb:
> 
>> Reply to Hoenir,
>> 
>>> I got a C file (it's a library, so in C you would create a static
>>> library and link it to another program) I want to use in D.
>>> I already created the necessary d file as described here:
>>> http://www.digitalmars.com/d/interfaceToC.html
>>> But how do I link the C code? dmd isn't able to compile C files.
>>> I know how to get a dll working (creating C dll, corresponding lib
>>> with
>>> implib and then adding that lib to the command line of dmd) but I
>>> want
>>> it to be statically linked like in C.
>>> Any hints?
>> Download dmc (the digital mars C compiler) and build the lib with
>> that. Then pass the .obj's or .lib to dmd with everything else. Or
>> use link.exe directly.
>> 
> I don't know which switches to use to generate a static library with
> dmc.
> I tried
> dmc -c main.c
> dmd test.d main.obj
> which didn't fix the Symbol Undefined error.

could you post a short example?


June 12, 2007
BCS schrieb:
> Reply to Hoenir,
> 
>> BCS schrieb:
>>
>>> Reply to Hoenir,
>>>
>>>> I got a C file (it's a library, so in C you would create a static
>>>> library and link it to another program) I want to use in D.
>>>> I already created the necessary d file as described here:
>>>> http://www.digitalmars.com/d/interfaceToC.html
>>>> But how do I link the C code? dmd isn't able to compile C files.
>>>> I know how to get a dll working (creating C dll, corresponding lib
>>>> with
>>>> implib and then adding that lib to the command line of dmd) but I
>>>> want
>>>> it to be statically linked like in C.
>>>> Any hints?
>>> Download dmc (the digital mars C compiler) and build the lib with
>>> that. Then pass the .obj's or .lib to dmd with everything else. Or
>>> use link.exe directly.
>>>
>> I don't know which switches to use to generate a static library with
>> dmc.
>> I tried
>> dmc -c main.c
>> dmd test.d main.obj
>> which didn't fix the Symbol Undefined error.
> 
> could you post a short example?
> 
> 
Ah, I'm so dumb. I forgot to pass the other d module to dmd that is imported by test.d
June 12, 2007
Hoenir schrieb:
> I got a C file (it's a library, so in C you would create a static library and link it to another program) I want to use in D.
> I already created the necessary d file as described here:
> http://www.digitalmars.com/d/interfaceToC.html
> 
> But how do I link the C code? dmd isn't able to compile C files.
> 
> I know how to get a dll working (creating C dll, corresponding lib with implib and then adding that lib to the command line of dmd) but I want it to be statically linked like in C.
> Any hints?
It works now if I use the obj file. But what if I want to import several files, which switch do I need to create a lib?
June 12, 2007
Reply to Hoenir,

> Hoenir schrieb:
> 
>> I got a C file (it's a library, so in C you would create a static
>> library and link it to another program) I want to use in D.
>> I already created the necessary d file as described here:
>> http://www.digitalmars.com/d/interfaceToC.html
>> But how do I link the C code? dmd isn't able to compile C files.
>> 
>> I know how to get a dll working (creating C dll, corresponding lib
>> with
>> implib and then adding that lib to the command line of dmd) but I
>> want
>> it to be statically linked like in C.
>> Any hints?
> It works now if I use the obj file. But what if I want to import
> several files, which switch do I need to create a lib?
> 

I think their is a lib.exe next to dmc

http://www.digitalmars.com/ctg/lib.html


June 13, 2007
IIRC, you can generate a static library simply by not having a main function anywhere in your program.

At least, that's what happens when I forget to link in the module with main in it :P

	-- Daniel
June 13, 2007
BCS schrieb:
> Reply to Hoenir,
> 
>> Hoenir schrieb:
>>
>>> I got a C file (it's a library, so in C you would create a static
>>> library and link it to another program) I want to use in D.
>>> I already created the necessary d file as described here:
>>> http://www.digitalmars.com/d/interfaceToC.html
>>> But how do I link the C code? dmd isn't able to compile C files.
>>>
>>> I know how to get a dll working (creating C dll, corresponding lib
>>> with
>>> implib and then adding that lib to the command line of dmd) but I
>>> want
>>> it to be statically linked like in C.
>>> Any hints?
>> It works now if I use the obj file. But what if I want to import
>> several files, which switch do I need to create a lib?
>>
> 
> I think their is a lib.exe next to dmc
> 
> http://www.digitalmars.com/ctg/lib.html
> 
> 
Yes this approach works. Thx.