Thread overview | ||||||
---|---|---|---|---|---|---|
|
June 07, 2011 [Issue 6121] New: Can't link with DMC C++ generated functions with long arguments | ||||
---|---|---|---|---|
| ||||
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: ------- |
June 11, 2011 [Issue 6121] Can't link with DMC C++ generated functions with long arguments | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | 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: ------- |
June 11, 2011 [Issue 6121] Can't link with DMC C++ generated functions with long arguments | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | 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: ------- |
June 12, 2011 [Issue 6121] Can't link with DMC C++ generated functions with long arguments | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | 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: ------- |
Copyright © 1999-2021 by the D Language Foundation