Clang OS X Lion, не может найти cstdint

Я пытаюсь скомпилировать приложение, использующее cstdint. Поскольку Apple отказывалась от gcc, я хотел попробовать скомпилировать его с clang, но я получаю ошибку:

fatal error: 'cstdint' file not found

Я знаю, что версия gcc 4.6.2 имеет опцию для -std=c++0x, чтобы включить библиотеку, но так как версия os x равна 4.2, здесь не так много опции. Любые предложения о том, как я могу двигаться вперед? Я попытался установить 4.6.2, но столкнулся с множеством проблем при компиляции некоторых из необходимых библиотек до сборки gcc.

Ответы

Ответ 1

Предположительно, у вас есть исходный код для этого приложения, поэтому вы можете изменить заголовки, чтобы включить правильный заголовок cstdint, так как Clang 3.0 (к которому подключаются инструменты Lion) имеет заголовок.

Быстрое решение

Заголовок находится под каталогом tr1, поэтому вы захотите сделать одно из них:

#include <tr1/cstdint>

или

#include <stdint.h> // which will use the C99 header

Более длинное, скучное объяснение

После некоторого дополнительного чтения, поскольку я помню, вы можете сделать это без каталога tr1:

По умолчанию вы будете включать заголовки С++ из /usr/include/c++/4.2.1, которые являются заголовками GNU GCC. /usr/include/c++/4.2.1/tr1 включает файлы заголовка TR1, такие как cstdint.

Альтернативный метод заключается в компиляции с использованием интерфейса Clang++ и передачи флага -stdlib=libc++, который будет использовать заголовки из /usr/include/c++/v1, которые являются реализациями заголовка Clang С++. Он имеет cstdint.

Пример:

// file called example.cxx
#include <tr1/cstdint>

int main() {
    // whatever...
}

Скомпилируйте это с помощью:

g++ example.cxx

или

clang++ example.cxx

И он будет делать то, что вы хотите.

Если вы не хотите использовать версию tr1 (примерно то же самое, если не точно):

// file called example.cxx
#include <cstdint>

int main() {
    // stuff
}

Это скомпилировано следующим образом:

clang++ -stdlib=libc++ example.cxx

Хотя, если вы используете -stdlib=libc++, это означает, что вы связываетесь с библиотекой Clang С++ libc++, а не с GCC libstdc++.