2014-01-31 3 views
0

Я новичок в использовании emscripten и столкнулся с ошибкой при компиляции файла cpp.Ошибка Emscripten при компиляции функции двойного сравнения 'IsAlmostEqual'

У меня есть iae.cpp:

bool IsAlmostEqual(double A, double B) 
{ 
    //http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm 
    long long aInt = reinterpret_cast<long long&>(A); 
    if (aInt < 0) aInt = -9223372036854775808LL - aInt; 
    long long bInt = reinterpret_cast<long long&>(B); 
    if (bInt < 0) bInt = -9223372036854775808LL - bInt; 
    return (std::abs(aInt - bInt) <= 10000); 
} 

Я попытался собрать его с помощью emscripten:

emcc iae.cpp

но он генерирует следующие предупреждения и ошибки:

INFO  root: (Emscripten: Running sanity checks) 
WARNING root: java does not seem to exist, required for closure compiler. -O2 and above will fail. You need to define JAVA in ~/.emscripten 
iae.cpp:5:27: warning: integer constant is so large that it is unsigned 
    if (aInt < 0) aInt = -9223372036854775808LL - aInt; 
         ^
iae.cpp:7:27: warning: integer constant is so large that it is unsigned 
    if (bInt < 0) bInt = -9223372036854775808LL - bInt; 
         ^
iae.cpp:8:13: error: use of undeclared identifier 'std' 
    return (std::abs(aInt - bInt) <= 10000); 
      ^
2 warnings and 1 error generated. 
ERROR root: compiler frontend failed to generate LLVM bitcode, halting 

Как избавиться от этих предупреждений и ошибок, и возможно ли это o компилировать IsAlmostEqual() используя emscripten?

ответ

1

Похоже, вы

  1. Пропущенный включаемый в <cstdlib>
  2. Попробуйте использовать 64 битное значение, которое изначально не поддерживается JavaScript. Вы можете сделать это, НО только за счет производительности. Прочтите https://github.com/kripken/emscripten/wiki/CodeGuidelinesAndLimitations для руководства.
+0

Спасибо! Похоже, что функция портирована неправильно в Javascript, так как она так часто терпит неудачу. См. Комментарии к этому ответу: http://stackoverflow.com/a/21468662/1691517 –

Смежные вопросы