On Tue, 22 Jun 2010 04:04:03 -0400, Clemens <eriatark...@gmail.com> wrote:
Clemens Wrote:
I have a stupid problem linking D with C. This is with D 1.062, haven't
tried D2. So say I have two files:
------ cfmt.c --------
#include <string.h>
char* myfmt(double x)
{
static char buf[40];
sprintf(buf, "%f", x);
return buf;
}
------- test.d --------
extern(C) char* myfmt(double x);
void main()
{
myfmt(42.3);
}
---------------------------
and I compile and link them as follows:
> dmc -c cfmt.c
> dmd test.d cfmt.obj
> test.exe
I get the runtime error "Floating point not loaded". No exception or
anything, the executable just terminates with that message on the
terminal. I found a short paragraph about that runtime error on
http://www.digitalmars.com/ctg/runtime.html
but it wasn't too helpful; a quick grep showed me that _fltused occurs
in both cfmt.obj and test.obj.
Anyone seen this before? What can I do? I'm pretty sure this used to
work with an older version. The actual real-world use case is linking
to Lua, which bombs out with the same message once you use the string
concatenation operator with a numeric argument. I used the Lua binding
from dsource which comes with a precompiled library, and just to be
sure I then compiled my own version of Lua with dmc; to no avail.
Clemens
FWIW, I found a workaround to this: if I specify to link with snn.lib
explicitly on the command line, then everything seems to work. I'm a bit
surprised since I thought that snn.lib is pulled in automatically. Is
this a bug in DMD, in Optlink, or by some strange twist of fate expected
behavior?
Clemens
You always need to specify the libs you're linking too. This has always
been the case. There is a pragma statement that tells the compiler to link
a library, so you can specify the link in the code rather than the command
line.