LINUX.ORG.RU

gcc 4.4.2: не знает про uint64_t


0

0

Как такое может быть?

root@mops64:~/mpkg/lib/build# make
[  3%] Building CXX object CMakeFiles/mpkg.dir/mpkg.o
/root/mpkg/lib/mpkg.cpp: In member function ‘int mpkgDatabase::commit_actions()’:
/root/mpkg/lib/mpkg.cpp:1352: ошибка: нет декларации ‘uint64_t’ в этой области видимости
/root/mpkg/lib/mpkg.cpp:1352: ошибка: expected ‘;’ before ‘sz’
/root/mpkg/lib/mpkg.cpp:1361: ошибка: нет декларации ‘sz’ в этой области видимости
make[2]: *** [CMakeFiles/mpkg.dir/mpkg.o] Ошибка 1
make[1]: *** [CMakeFiles/mpkg.dir/all] Ошибка 2
make: *** [all] Ошибка 2

gcc 4.4.2, две почти одинаковые системы, одна x86 - там всё ок, другая x86_64, там не работает. Впервые вижу чтоб gcc не узнавал базовые типы. Куда копать?

Ответ на: комментарий от Love5an

Ага, точно, дело именно в нем. Видимо теперь надо включать в явном виде, раньше без этого работало.

aix27249
() автор топика

Если не ошибаюсь, то uint64_t и другие целочисленные типы фиксированного размера появились только в стандарте C99 (это обычный Си, который без плюсов). Так что в C++ (по крайней мере согласно текущему стандарту) этих типов может и не быть.

Если нужно кроссплатформенное решение, то попробуй взять cstdint.hpp из состава Boost.

Deleted
()
Ответ на: комментарий от Sectoid

наверное таки лучше:

#include <cstdint>

Опять таки, если не ошибаюсь, то это уже будущий стандарт C++0x, который ещё не зарелизился.

Deleted
()
Ответ на: комментарий от Deleted

Отсюда:

Each header from the C standard library is included in the C++ standard library under a different name, generated by removing the .h, and adding a 'c' at the start, for example time.h becomes ctime. The only difference between these headers and the traditional C standard library headers is that where possible the functions should be placed into the std:: namespace (although few compilers actually do this). In ISO C, functions in standard library are allowed to be implemented by macros, which is not allowed by ISO C++.

Хотя они тоже могут ошибаться...

В любом случае — беды не будет, а в дальнейшем (когда C++0x таки выйдет) будет легче.

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

Хотя они тоже могут ошибаться...

C99 не совместим с C++, так что заголовочные файлы C99 не обязаны быть в компиляторе C++. Именно не обязаны, т.е. могут быть, а могут и не быть.

В любом случае — беды не будет, а в дальнейшем (когда C++0x таки выйдет) будет легче.

Проблем будет при попытке скомпилировать с помощью компилятора из MS VC++, а возможно и каких-либо других компиляторов C++. У MS нет отдельного компилятора C с полноценной поддержкой C99, так что и stdint.h там тоже нет.

Deleted
()
Ответ на: комментарий от Booster

#include <cstdint>

Нету этого.

$ cat test.cpp 
#include <cstdint>

int main()
{
	return 0;
}

$ g++ test.cpp 
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.2/../../../../include/c++/4.4.2/cstdint:35,
                 from test.cpp:1:
/usr/lib/gcc/x86_64-redhat-linux/4.4.2/../../../../include/c++/4.4.2/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

$ g++ -std=c++0x test.cpp 

$ g++ -dumpversion
4.4.2
Deleted
()
Ответ на: комментарий от Booster

>Нету этого.

значит я погорячился, мне почему-то казалось что есть). тогда stdint.h и ждать c++0x.

Sectoid ★★★★★
()
Ответ на: комментарий от Booster

И в 4.3 он должен быть.

$ cat test.cpp 
#include <cstdint>

int main() 
{ 
   return 0; 
}

$ g++ test.cpp 
In file included from /usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/cstdint:40,
                 from test.cpp:1:
/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/c++0x_warning.h:36:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

$ g++ -std=c++0x test.cpp 

$ g++ -dumpversion
4.3.4

Deleted
()
Ответ на: комментарий от Booster

Заголовочный файл cstdint добавили в gcc 4.2 и в 4.3.1 он есть. Может в твоём дистрибутиве мейнтейнеры умудрились вырезать поддержку c++0x или вынести её в отдельный пакет?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.