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:

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

Альтернативный метод заключается в компиляции с использованием внешнего интерфейса Clang++ и передачи -stdlib=libc++ флаг, который будет использовать заголовки из /usr/include/c++/v1, которые являются реализациями заголовка C++ 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 C++ libc++, а не GCC libstdc++,

Другие вопросы по тегам