Possible workaround for static linking of C and D obj files on Win32

Andrej Mitrovic none at none.none
Mon Jan 17 10:06:02 PST 2011


Currently we have this issue where we can't link D combiled object files with C applications on Win32 (assuming the D code exports some names with extern(C)). The problem is optlink outputs OMF type object files, and pretty much all modern Win32 C compilers (VC/MinGW) expect COFF object file types.

There's agner's objconv tool that can dissasemble optlink's OMF format, but it won't convert optlink's OMF to COFF since it keeps running into errors.

However, there might be a workaround. *Please not that this is purely  experimental*:

First, download the Delphi Driver Development Kit (DDDK) from here:
https://sites.google.com/site/delphibasics/home/delphibasicsprojects/delphidriverdevelopmentkit

In the bin folder there's a tool called 'omf2d'. This is a tool that converts Borland's OMF to Intel OMF format, but it seems to be able to convert Optlink's OMF format to an OMF format that Objconv can use. My guess is that omf2d simply discards sections it doesn't understand and therefore Objconv uses the resulting object file without errors. I do not know how safe this is, so take it with a large grain of salt.

Second, download objconv.exe from: http://www.agner.org/optimize/.
Third, make sure you have MinGW installed since it comes with gcc.exe which we'll use, or you can modify the batch file I'm providing and use MSVC instead (I haven't tested this with MSVC yet).

Make sure both omf2d and objconv are in PATH. Then, download the zip file with the sample project, extract and run the batch file that does all the work:

http://dl.dropbox.com/u/9218759/staticObjLink.zip

I've tried using this with .lib files, but Objconv couldn't convert the .lib file even after passing it through omf2d, it still keeps getting errors. So for now this only seems to work with .obj files (compiled with DMD -c). And I don't know to what extent this will work since this is the only example I've tried using this technique with for now.


More information about the Digitalmars-d mailing list