В xcode при включении cmath возникает ошибка: '::acos' не был объявлен и т. д.

Я получаю следующие ошибки при попытке построить небольшой и простой проект, который включает <cmath> в Xcode:

cmath: '*' has not been declared
'::acos' has not been declared
In file included from /Xcode4/Projects/libraryLAFMath/Classes/libraryLAFMath.cp
In file included from /Xcode4/Projects/libraryLAFMath/Classes/libraryLAFMath.h
'::acos' has not been declared in /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.1.sdk/usr/include/c++/4.2.1/cmath
...

Журнал ошибок также жалуется на все остальные математические функции, sin, pow и т. д., а не только на acos. Я просмотрел исходный код cmath, и он ссылается на глобально определенные соответствующие математические функции из math.h, т.е. ::acos и т. д. Поскольку основная ошибка жалуется на отсутствие ::acos, можно было бы предположить, что math.h не может быть найден, но а) он существует и б) я получаю другую ошибку, жалующуюся на то, что math.h не может быть найден.

Исходный код выглядит следующим образом:

библиотекаLAFMath.cp:

#include "libraryLAFMath.h"

библиотекаLAFMath.h:

#include <cmath>
struct libraryLAFMath {
    void test() {
        double a = std::acos(0);
    }
};

Теперь у меня есть другой проект из внешнего источника, который использует cmath и отлично компилируется. Я попытался сравнить настройки сборки между этими двумя проектами, но они почти одинаковы. Я использую компилятор LLVM GCC 4.2, но получаю аналогичный результат при использовании GCC 4.2, поэтому я считаю, что это не проблема настроек компилятора.

Я новичок в разработке Xcode, и любая помощь приветствуется.


person andrewz    schedule 15.10.2010    source источник


Ответы (2)


В моем проекте есть файл с именем Math.h с заглавной M, и кажется, что компилятор запутался и пытается включить Math.h вместо math.h.

person andrewz    schedule 15.10.2010
comment
@Delan, для меня это звучит как ответ, а не дополнительная деталь, так что без проблем ... - person bdonlan; 15.10.2010
comment
Хм, наверное. Прости за это. - person Delan Azabani; 15.10.2010

Я разместил этот ответ в альтернативной теме по теме, но подумал, что стоит включить и сюда:

У меня была эта проблема - она ​​сводила меня с ума, но я отследил причину, и она немного отличалась от того, что я видел в сообщениях по этой проблеме.

В этом случае общий заголовок cmath (или math.h — ошибка и решение возникают в C++ или C) имел переключатели архитектурной среды для включения математических подзаголовков, специфичных для архитектуры. Переключатель архитектуры (переменная среды) не был определен, поэтому он зависал и фактически не включал заголовки, которые действительно определяли математические функции.

Таким образом, действительно был единственный math.h или cmath.h, и он был включен, но этого было недостаточно, чтобы получить математические функции. В моем случае, вместо того, чтобы определять архитектурную переменную, я вместо этого нашел расположение правильных заголовков вспомогательной математики и добавил их в свой путь компиляции. Тогда проект сработал!

Похоже, это проблема, которая часто возникает при переносе проектов Linux на OS-X. Я предполагаю, что это может произойти каждый раз, когда проект перемещается между платформами, так что заголовки стандартной библиотеки расположены по-разному.

person user2465201    schedule 23.09.2013