Файл test.c : #include <stdio.h> #include <linux/types.h> int main(int argc, char **argv) { aligned_u64 test64 = 0; return 0; } при компиляции gcc выдаёт: test.c: In function main: error: aligned_u64 undeclared (first use in this function) error: (Each undeclared identifier is reported only once error: for each function it appears in.) error: expected ; before test64 Короче не находит <linux/types.h>. Менял <linux/types.h> на </usr/include/linux/types.h> - не помогло. 1) Как посмотреть какие *.h файлы gcc подгружает при компиляции? 2) Может испорчен types.h ?
gcc -I /usr/include -c test.c вообще говоря, <linux/types.h> - это заголовочный файл ядра и использовать его для написания не модулей ядра не следует
t00x А по сообщению так не скажешь Этот макрос (aligned_u64) включается только если определены какие-то прерпоцессорные константы, типа __KERNEL__ и т.п.
rei3er gcc -I /usr/include -c test.c - тоже пробовал. Причем если вставить #define aligned_u64 ... непосредственно в test.c - компилируется. Файл <linux/types.h> существует (специально проверил). вообще говоря, <linux/types.h> - это заголовочный файл ядра и использовать его для написания не модулей ядра не следует - упс! не знал, что ядра.
Quantum Кажется __KERNEL_STRICT_NAMES. IceStudent В <sys/types.h> нет определения ... /* this is a special 64bit data type that is 8-byte aligned */ #define aligned_u64 unsigned long long __attribute__((aligned(8))) ... rei3er Спасибо (не знал, что ядра). Спасибо всем. И ещё вопрос (теоретический). Если код модуля ядра (подгружаемого) в исполняемый файл вставить, получиться отладиццца?
нет, если модуль будет содержать ссылки на внешние символы (экспортируемые ядром и находящиеся в ядре)