digitalmars.D - linking with C libraries
- Aureliano (16/16) Aug 16 2004 Hi, everyone!
- anon (10/26) Aug 17 2004 I hope this helps:
- Aureliano (6/15) Aug 17 2004 The .lib does not work. There should be some specified way to produce C ...
- Ilya Minkov (10/32) Aug 17 2004 You are probably trying to link with .LIB files from the wrong C
Hi, everyone! I am starting to use D, and I am very excited about it. It's said that D program can call C functions directly. That's great, and I understand how to convert *.h into *.d. My question is: What kinds of C library files can be used (in linking stage)? I did not find the answer in D's HTML docs. dmd's link.exe does not accept my C libraries with message " Error 43: Not a Valid Library File" More specific. Suppose I have a C library with source, and I want to use it in my D project. The library is big and complex enough and has unique functionality, which I don't want to port into D myself. (I am now talking about FreeType). Which compiler and linker (for dll) I should use to produce .lib which I can link to my D program? I use DJGPP, MinGW, Cygwin, MSVC, Intel C++, and Metrowerks, all under Windows. (And FreeType works just fine with all of them in my C/C++ programs). Thanks a lot! Aura
Aug 16 2004
In article <cfs6ku$onq$1 digitaldaemon.com>, Aureliano says...Hi, everyone! I am starting to use D, and I am very excited about it. It's said that D program can call C functions directly. That's great, and I understand how to convert *.h into *.d. My question is: What kinds of C library files can be used (in linking stage)? I did not find the answer in D's HTML docs. dmd's link.exe does not accept my C libraries with message " Error 43: Not a Valid Library File" More specific. Suppose I have a C library with source, and I want to use it in my D project. The library is big and complex enough and has unique functionality, which I don't want to port into D myself. (I am now talking about FreeType). Which compiler and linker (for dll) I should use to produce .lib which I can link to my D program? I use DJGPP, MinGW, Cygwin, MSVC, Intel C++, and Metrowerks, all under Windows. (And FreeType works just fine with all of them in my C/C++ programs). Thanks a lot! AuraI hope this helps: convert your .h files to .d. extern (C): void c_lib_function(/* arguments */); // other functions Then, you can use them in your D file like normal. Use a command similar to this to compile your D program: dmd d_file.d your_c_lib.lib OK? If you're .lib file doesn't work... then I don't know what to do!
Aug 17 2004
In article <cfsb7d$r2l$1 digitaldaemon.com>, anon says...I hope this helps: convert your .h files to .d. extern (C): void c_lib_function(/* arguments */); // other functions Then, you can use them in your D file like normal. Use a command similar to this to compile your D program: dmd d_file.d your_c_lib.lib OK? If you're .lib file doesn't work... then I don't know what to do!The .lib does not work. There should be some specified way to produce C .libs, linkable by D's link.exe. When I try to supply .lib, produced by MinGW's 'ar.exe' or by MSVC's 'lib.exe', DMD's link.exe does not accept it. Thanks for answering, anyway! Aura
Aug 17 2004
In article <cfslti$v7l$1 digitaldaemon.com>, Aureliano says...In article <cfsb7d$r2l$1 digitaldaemon.com>, anon says...Try using DM's lib.exe (\dm\bin\lib.exe). Very simple: lib -c my.lib my.objs ... You can make C & D libraries with it.I hope this helps: convert your .h files to .d. extern (C): void c_lib_function(/* arguments */); // other functions Then, you can use them in your D file like normal. Use a command similar to this to compile your D program: dmd d_file.d your_c_lib.lib OK? If you're .lib file doesn't work... then I don't know what to do!The .lib does not work. There should be some specified way to produce C .libs, linkable by D's link.exe. When I try to supply .lib, produced by MinGW's 'ar.exe' or by MSVC's 'lib.exe', DMD's link.exe does not accept it. Thanks for answering, anyway! Aura
Aug 17 2004
"Aureliano" <gazer pisem.net> wrote in message news:cfslti$v7l$1 digitaldaemon.com...In article <cfsb7d$r2l$1 digitaldaemon.com>, anon says....libs,I hope this helps: convert your .h files to .d. extern (C): void c_lib_function(/* arguments */); // other functions Then, you can use them in your D file like normal. Use a command similar to this to compile your D program: dmd d_file.d your_c_lib.lib OK? If you're .lib file doesn't work... then I don't know what to do!The .lib does not work. There should be some specified way to produce Clinkable by D's link.exe. When I try to supply .lib, produced by MinGW's 'ar.exe' or by MSVC's 'lib.exe', DMD's link.exe does not accept it. Thanks for answering, anyway!The problem you're having has nothing to do with C vs D compatibility, it is because the library you're using is not in OMF format. You could try COFF2OMF to convert it. If you can get the library to link with DMC, it will link with D.
Aug 17 2004
Thanks Ilya, Walter! Now it works. I compiled FreeType with DMC and it works OK. (Thanks to FreeType's code quality). It seems to work a bit slower than compiled by GCC or MSVC, but perhaps I missed some compiler optimization options (I used only -o). Anyway it works fine. Converting FreeType headers into D modules will be another task of course. Aura Ilya Minkov says...You are probably trying to link with .LIB files from the wrong C compiler. DigitalMars D uses the same back-end and binary tools as DigitalMars C and C++, so these tools have to be used, because the file format differs severely from that of Microsoft and MinGW. Please refer to DMC Compiler and Tools guide from the DigitalMars website on help how to create stub .LIBs from DLLs using implib (basic tools package). If you want a static library, recompile it with DMC, or you can try the commercial advanced utilities package COFF2OMF.Walter says...The problem you're having has nothing to do with C vs D compatibility, it is because the library you're using is not in OMF format. You could try COFF2OMF to convert it. If you can get the library to link with DMC, it will link with D.
Aug 17 2004
You are probably trying to link with .LIB files from the wrong C compiler. DigitalMars D uses the same back-end and binary tools as DigitalMars C and C++, so these tools have to be used, because the file format differs severely from that of Microsoft and MinGW. Please refer to DMC Compiler and Tools guide from the DigitalMars website on help how to create stub .LIBs from DLLs using implib (basic tools package). If you want a static library, recompile it with DMC, or you can try the commercial advanced utilities package COFF2OMF. -eye Aureliano schrieb:Hi, everyone! I am starting to use D, and I am very excited about it. It's said that D program can call C functions directly. That's great, and I understand how to convert *.h into *.d. My question is: What kinds of C library files can be used (in linking stage)? I did not find the answer in D's HTML docs. dmd's link.exe does not accept my C libraries with message " Error 43: Not a Valid Library File" More specific. Suppose I have a C library with source, and I want to use it in my D project. The library is big and complex enough and has unique functionality, which I don't want to port into D myself. (I am now talking about FreeType). Which compiler and linker (for dll) I should use to produce .lib which I can link to my D program? I use DJGPP, MinGW, Cygwin, MSVC, Intel C++, and Metrowerks, all under Windows. (And FreeType works just fine with all of them in my C/C++ programs). Thanks a lot! Aura
Aug 17 2004