digitalmars.D.bugs - [Issue 6121] New: Can't link with DMC C++ generated functions with long arguments
- d-bugmail puremagic.com (45/45) Jun 07 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6121
- d-bugmail puremagic.com (10/10) Jun 11 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6121
- d-bugmail puremagic.com (8/8) Jun 11 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6121
- d-bugmail puremagic.com (18/18) Jun 12 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6121
http://d.puremagic.com/issues/show_bug.cgi?id=6121 Summary: Can't link with DMC C++ generated functions with long arguments Product: D Version: unspecified Platform: Other OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: andrej.mitrovich gmail.com --- Comment #0 from Andrej Mitrovic <andrej.mitrovich gmail.com> 2011-06-07 11:11:04 PDT --- foo.d: extern(C++) void test(int); void main() { test(1); } bar.cpp: void test(long) { }; $ dmc -c -cpp bar.cpp $ dmd foo.d bar.obj http://www.digitalmars.com/ctg/optlink.html foo.obj(foo) Error 42: Symbol Undefined ?test YAXH Z (void cdecl test(int )) Symbol reference in foo.obj (D): ?test YAXH Z Symbol in bar.obj (CPP): ?test YAXJ Z According to this page: http://www.digitalmars.com/ctg/ctgMemoryModel.html , long in DMC has the same size as int in D. I've tried various other types but nothing works. Only if I change bar.cpp's test to: void test(int){} then it will compile and link. So how am I supposed to link with C++ functions that take a long if I can't change them? Due to this bug I can't link DDMD with the backend of DMD 2.053. Also, your DMC echoes 8.42n instead of 8.52c, fyi. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 07 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6121 Jonathan M Davis <jmdavisProg gmx.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jmdavisProg gmx.com --- Comment #1 from Jonathan M Davis <jmdavisProg gmx.com> 2011-06-11 15:30:54 PDT --- I believe that that's why druntime uses the alias c_long. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 11 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6121 --- Comment #2 from Andrej Mitrovic <andrej.mitrovich gmail.com> 2011-06-11 15:50:12 PDT --- Right, c_long is an alias to int on Windows. It still won't link, but a comment in another thread might lead me to believe that this is just a name-mangling problem. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 11 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6121 yebblies <yebblies gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |yebblies gmail.com Resolution| |INVALID --- Comment #3 from yebblies <yebblies gmail.com> 2011-06-12 05:08:33 PDT --- This _is_ a name mangling problem. D's long is not the same as C's long (at least not on x86) and should not be mangled the same. There is currently no way to have dmd mangle a C or C++ function with a C long argument. As dmd is working as designed, I'm going to close this as invalid. You should reopen as an enhancement request if you think dmd should be changed to do things differently. (There is also already an enhancement request issue 2698 which would solve your problem) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 12 2011