Как правильно использовать boost с Xcode?
Я пытаюсь скомпилировать проект, используя библиотеку boost. Пример проекта отлично компилируется с использованием GCC 12 в терминале, но я не могу его скомпилировать в Xcode. Ошибки компилятора в основном связаны с проблемами пространства имен в библиотеке boost.
Например: /boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:11:11 No member named 'acos' in the global namespace
.
Из этого файла cmath:
#ifndef __CMATH_HEADER
#define __CMATH_HEADER
#include <math.h>
namespace std {
using ::acos;
using ::cos;
using ::fmod;
using ::modf;
//...
}
#endif // CMATH_HEADER
Я работаю на OSX 12.6.1 и использую Xcode 14.2. Включенные пути установлены на /usr/local/boost/boost_1_81_0
.
Я пытался скомпилировать с C++20 и C++17.
Другие библиотеки, включая cmath (не из boost), работают нормально.
Пример проекта в main.cpp
:
#include <iostream>
#include <iterator>
#include <algorithm>
#include <boost/lambda/lambda.hpp>
int main()
{
using namespace boost::lambda;
typedef std::istream_iterator<int> in;
std::for_each(
in(std::cin), in(), std::cout << (_1 * 3) << " " );
}
Ошибки компилятора:
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:11:11: error: no member named 'acos' in the global namespace
using ::acos;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:12:11: error: no member named 'cos' in the global namespace
using ::cos;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:13:11: error: no member named 'fmod' in the global namespace
using ::fmod;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:14:11: error: no member named 'modf' in the global namespace
using ::modf;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:15:11: error: no member named 'tan' in the global namespace
using ::tan;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:16:11: error: no member named 'asin' in the global namespace
using ::asin;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:17:11: error: no member named 'cosh' in the global namespace
using ::cosh;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:18:11: error: no member named 'frexp' in the global namespace
using ::frexp;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:19:11: error: no member named 'pow' in the global namespace
using ::pow;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:20:11: error: no member named 'tanh' in the global namespace
using ::tanh;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:21:11: error: no member named 'atan' in the global namespace
using ::atan;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:22:11: error: no member named 'exp' in the global namespace
using ::exp;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:23:11: error: no member named 'ldexp' in the global namespace
using ::ldexp;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:24:11: error: no member named 'sin' in the global namespace
using ::sin;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:25:11: error: no member named 'atan2' in the global namespace
using ::atan2;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:26:11: error: no member named 'fabs' in the global namespace
using ::fabs;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:27:11: error: no member named 'log' in the global namespace
using ::log;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:28:11: error: no member named 'sinh' in the global namespace
using ::sinh;
~~^
/usr/local/boost/boost_1_81_0/boost/compatibility/cpp_c_headers/cmath:29:11: error: no member named 'ceil' in the global namespace
using ::ceil;
~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
@AlexCohn Большое спасибо. Я как-то совсем забыл попробовать скомпилировать через терминал (без Xcode). Использование gcc сработало. Теперь понятно, что проблема в Xcode/моих настройках в Xcode.
Я не совсем уверен, что решило проблему, но теперь это работает. Я установил путь включения заголовка в Xcode: /usr/local/boost/boost_1_81_0
(нерекурсивный). Рекурсивный вариант мог быть источником всех ошибок. Спасибо всем за помощь!
см. stackoverflow.com/a/53088237/192373
ваш файл компилируется как есть с
-I /opt/homebrew/Cellar/boost/1.81.0_1/include
. Вы (или Xcode для вас) указываете другие параметры в командной строке?