2014-10-07 4 views
0

Я собираю программу linux на cygwin (обучение классу со студентами, имеющими компьютеры Windows), и столкнулись с проблемой совместимости, я думаю.Ошибка компиляции Cygwin: «log10l» не распознан (объявлен)

Ошибки я получаю это:

`$ Make 
g++ -fopenmp -c start.cpp errors.cpp 
start.cpp: In function ‘int main(int, char**)’: 
start.cpp:1184:54: error: ‘log10l’ was not declared in this scope 
     else po[i]=log10l(p_rj[i]/(1-p_rj[i])); 
               ^
Makefile:7: recipe for target 'start.o' failed 
Make: *** [start.o] Error 1` 

log10l не объявлен. Небольшое исследование на сайте cygwin об этом, и я нашел это page, в котором перечислены «не реализованные системные интерфейсы» и log10l.

Должен ли я заменить «log10l» на совместимую функцию и почему бы это не было совместимо?

Приложение скомпилировано без ошибок на моем ящике Linux.

Любая помощь была бы высоко оценена.

LP

+0

Я считаю, что log10l является стандартом c99. в C++ просто используйте log10 (есть перегрузки для double и long double) –

ответ

0

Если эта функция просто принимает логарифм с основанием 10 внутреннего выражения, вы можете просто заменить его

else po[i] = std::log10(p_rj[i]/(1-p_rj[i])); 

Пока же вы

#include <cmath> 
+0

Спасибо, что сработало, по крайней мере, компиляция закончена. Мне пришлось также изменить logl на log. В более широком смысле, почему CygWin не распознает эти функции? Не являются ли они функциями C++? Я не программирую на C++, поэтому менее знакомый ... log10l отличается от log10? –

+0

Я думаю, что 'log10l' происходит от' ', это' long' версия 'log10', а не шаблонная стандартная C++. – CoryKramer

0

Cygwin в настоящее время не поддерживает long double математические функции, из которых log10l является одним. Вместо этого вы можете использовать log10, но он ограничен типом double.

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