Floating point not loaded
Don
nospam at nospam.com
Tue Jun 22 11:29:01 PDT 2010
Clemens wrote:
> Robert Jacques Wrote:
>
>> On Tue, 22 Jun 2010 04:04:03 -0400, Clemens <eriatarka84 at 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.
>
> I do believe the case is different here since snn.lib is the Digital Mars C runtime library. I quote from http://www.digitalmars.com/d/1.0/dmd-windows.html:
>
>> The programs must be linked with the D runtime library phobos.lib, followed by the C runtime library snn.lib. This is done automatically as long as the directories for the libraries are on the LIB environment variable path.
>
> I have no reason to doubt that the paths are set up correctly since linking a D-only program works without problems.
>
> Also note that this is a runtime error, not a compile- or link-time error.
Sounds as though there might be two different versions of snn.lib? Maybe
it's getting the wrong one.
More information about the Digitalmars-d
mailing list