- Thread: including linux header files
- including linux header files
- Язык C, C++: как подключать (#include) заголовки относительно корня проекта в GCC, кроссплатформенно?
- Как добавить в linux заголовки для работы с ядром?
- Русские Блоги
- Путь поиска для заголовочных файлов и библиотек Linux
- 1.1 В какую папку устанавливаются библиотечные файлы .so и заголовочные файлы .h при установке glibc, как gcc может правильно найти соответствующие папки?
- 1.2 Каковы пути поиска библиотеки ссылок, когда программа связана?
- 1.3 Когда программа работает, каковы пути поиска в библиотеке динамических ссылок?
- 1.4. Каковы пути поиска заголовочных файлов при компиляции программы?
- 1.5. При настройке кросс-компилятора, каковы конфигурации пути поиска?
- 2. Пример операции
- 2.1, путь поиска библиотеки при связывании
- 2.2, место поиска библиотеки динамической загрузки во время выполнения
- 2.3 Каковы пути поиска заголовочных файлов при компиляции программы?
Thread: including linux header files
Thread Tools
Search Thread
Display
including linux header files
I was wondering if anyone could tell me how to include linux source headers into a C program. Right now the header files for my linux version are stored in /usr/src/linux-headers-2.6.28-15/include, but I’ve noticed that many sites have said they were located in /usr/src/linux or /usr/include/linux but I don’t have a /usr/src/linux directory.
Paticularly, I was trying to find the task_struct definition which is supposedly located in sched.h. One site told me it was in /usr/include/linux which it was, however it didn’t contain the definition of task_struct. Another site told me it was in /usr/src/linux but I had no such directory so I looked in /usr/src/linux-headers-2.6.28-15/include and there was another sched.h that contained the definition of task_struct. However, the site contained some code snippets that included the sched.h file in this manner
However, when I do this, it points me to the sched.h in my /usr/include directory which doesn’t contain the task_struct definition. So am I suppose to include it like this?
Or am I suppose to make a symbolic link from /usr/src/linux to usr/src/linux-header-2.6.28-15/include? Or do I copy the headers from usr/src/linux-header-2.6.28-15/include to /usr/include/linux? I don’t know, I’m confused, and if someone could clarify I would appreciate it.
By the way the site I was looking at was this one: Learning about Linux Processes LG #133
If you look at the 7th code listing, they include the header as linux/sched.h
My basic suggestion is to see what your system thinks it is, by typing something like «man task_struct» (or maybe «apropos task_struct») and reading the documentation.
Having said that, usr/src/linux-headers-2.6.28-15/include is certainly a possible path, but it’s not where I’m sort of expecting that to be. I’m assuming you installed the linux devel package or source package or whatever it’s called and that’s what you got? Are you not actually running 2.6.28-15 yourself? (If you had two different versions of the kernel running around, then it would make sense to have the versions in the path.)
You could also update your Linux Headers (this should be an RPM or whatever for most systems). If it is not, then look for Linux Headers — these are sanitized Linux headers from the kernel — not just a copy of the Linux kernel headers.
Источник
Язык C, C++: как подключать (#include) заголовки относительно корня проекта в GCC, кроссплатформенно?
Никак не могу понять простую вещь.
Мне необходимо подключать заголовочные файлы относительно корня проекта. Надоело указывать относительные пути, потому что из разных каталогов проекта путь до одно и того же заголовка будет разный. Да и вообще относительные пути — это неправильно.
Насколько я выяснил, в Linux можно добавлять в переменную окружения INCLUDE_PATH путь к каталогу проекта. После чего будут работать директивы #include с файлами относительно корня проекта:
. препроцессор последовательно перебирает пути в INCLUDE_PATH начиная с первого. Относительный путь из директивы include разрешается относительно (sic) папки из INCLUDE_PATH. Если файл не найден, переходим к следующему элементу INCLUDE_PATH. Если INCLUDE_PATH исчерпан, компилятор сообщает об ошибке.
Однако возникают вопросы.
1. Какой путь добавлять к INCLUDE_PATH? Относительно корня файловой системы? Но тогда проект не будет собираться в другом каталоге, например, когда пользователь захочет самостоятельно скомпилировать проект, ведь у него не будет установлен нужный каталог в INCLUDE_PATH.
2. Где и как прописывать INCLUDE_PATH? Я поковырял исходники (Makefile) нескольких C/C++ опенсорчных проектов и не нашел никакой работы с INCLUDE_PATH. Значит, делают как-то по-другому, но как?
3. Проект кроссплатформенный. Необходимо понять, как и где настраивать INCLUDE_PATH (предположим, что используется система сборки make), чтобы компиляция шла и в Linux и в Windows под GCC.
4. Проект кроссплатформенный на Qt4. Необходимо понять, как и где настраивать INCLUDE_PATH, чтобы компиляция шла и в Linux и в Windows под GCC.
Источник
Как добавить в linux заголовки для работы с ядром?
Вопрос тупой но как добавить linux заголовки для работы с ядром. Суть мне нужно написать код для работать с прерываниямии драйвером 8250.#include
Убунта спасает тебя от паники ядра от твоего говнокода, подум0й.
Интересное замечание но без результативное мне нужен способ решения ошибки путем ее исправление а не отказа от работы
Поищи через synaptic
а есть менеджер для поиска пакетов на консоль просто у меня граф оболочка не установлена и для меня она ненужна слишком много места будет занимать
Почитать, как писать драйверы устройств. LDD3 тебе в помощь.
apt-get install linux-headers-$(uname -r )
установил не помогло если пытаюсь использовать библиотеку irq.h или serial_8250.h выходит такая ошибка fatal error: linux/irq.h: No such file or directory #include
Добавить при компиляции путь, относительно которого указываешь include ?
И не следует ставить тег Ubuntu для Debian, у них разное именование части пакетов. И вместо заголовков для конкретного ядра следует использовать метапакет linux-image-amd64
попытался в итоге начал ругать на другую библиотеку gcc -I /usr/src/linux-headers-$(uname -r)/include ex.c -o ex In file included from /usr/src/linux-headers-4.14.108-ti-r104/include/linux/kernel.h:7:0, from /usr/src/linux-headers-4.14.108-ti-r104/include/linux/list.h:9, from /usr/src/linux-headers-4.14.108-ti-r104/include/linux/module.h:9, from ex.c:1: /usr/src/linux-headers-4.14.108-ti-r104/include/linux/linkage.h:8:10: fatal error: asm/linkage.h: No such file or directory #include
теперь для всех каждый раз придется прописывать или все же можно как то по другому установить
Источник
Русские Блоги
Путь поиска для заголовочных файлов и библиотек Linux
Эта статья перенесена с: https://blog.csdn.net/pwl999/article/details/78219374
1.1 В какую папку устанавливаются библиотечные файлы .so и заголовочные файлы .h при установке glibc, как gcc может правильно найти соответствующие папки?
Когда мы устанавливаем –prefix = / path / при сборке gcc, gcc устанавливается в / path /. По умолчанию gcc будет искать библиотеки в / path / lib / и искать файлы заголовков в / path / include /.
Например, в обычных системах Linux и gcc, и glibc установлены в каталоге / usr /, поэтому исполняемый файл gcc находится в каталоге / usr / bin, а файл библиотеки glibc находится в / usr / lib В этом каталоге файл заголовка glibc находится в каталоге / usr / include.
Разумеется, указанное выше соотношение не является точным и может быть указано вручную при установке gcc и glibc. Вы можете использовать команду «gcc -print-search-dirs» для просмотра пути поиска библиотеки gcc:
Вы можете использовать следующие методы, чтобы изменить путь к библиотеке и файлу заголовка, который gcc ищет по умолчанию:
- (1) Используйте «gcc -nostdlib -Lusrlibpath», чтобы изменить путь поиска библиотеки по умолчанию для gcc, и используйте «gcc -nostdinc -Iusrincpath», чтобы изменить путь поиска заголовка по умолчанию для gcc.
- (2) Используйте «gcc -Wl, -sysroot =», чтобы изменить путь поиска библиотеки по умолчанию для gcc.
- (3) Измените файл спецификации gcc, чтобы настроить любые параметры gcc.
Спецификации — это файлы конфигурации gcc. Этот метод модификации является самым мощным, но он также является самым сложным и рискованным, поскольку файл спецификации gcc неясен и труден для понимания. Пока я не буду изменять его, но сначала я расскажу о существовании этого метода.
Используйте команду «gcc -v», чтобы просмотреть путь к спецификациям gcc:
В некоторых установках gcc используются встроенные спецификации, но нет внешних файлов спецификаций:
Для встроенной спецификации вы можете использовать команду «gcc -dumpspecs» для просмотра содержимого конкретной спецификации:
Вы также можете использовать «gcc -specs =», чтобы указать файл спецификации gcc.
- (4) Передается ли конфигурация gcc по умолчанию командой configure во время сборки?
Используйте команду «gcc -v» для просмотра значения конфигурации gcc. Параметры конфигурации описаны в файле gcc-4.1.0 \ gcc \ doc \ install.texi.
1.2 Каковы пути поиска библиотеки ссылок, когда программа связана?
При связывании конфигурация пути поиска библиотеки имеет следующие методы: (Для конкретного использования, пожалуйста, обратитесь к описанию в главе примера)
- (1) Используйте «gcc -Llibpath -llibname», чтобы указать путь поиска библиотеки ссылок.
- (2) Используйте переменную среды «LIBRARY_PATH», чтобы указать путь поиска библиотеки ссылок.
- (3) Используйте «SEARCH_DIR» в сценарии подключения ld, чтобы указать путь поиска библиотеки ссылок.
1.3 Когда программа работает, каковы пути поиска в библиотеке динамических ссылок?
При связывании конфигурация пути поиска библиотеки имеет следующие методы: (Для конкретного использования, пожалуйста, обратитесь к описанию в главе примера)
- (1) При компиляции используйте «gcc -Wl, -rpath», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения, и жестко запишите его в опцию «RPATH» файла ELF.
- (2) Переменная среды «LD_RUN_PATH» используется для указания пути поиска библиотеки динамических ссылок во время компиляции, и она жестко задана в опции «RPATH» файла ELF.
- (3) Используйте переменную среды «LD_LIBRARY_PATH», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения.
- (4) Используйте файл конфигурации «/etc/ld.so.conf», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения.
- (5) Используйте путь поиска по умолчанию «/ lib, / usr / lib» библиотеки динамических ссылок во время выполнения.
1.4. Каковы пути поиска заголовочных файлов при компиляции программы?
При компиляции конфигурация пути поиска файла заголовка имеет следующие методы: (Для конкретного использования, пожалуйста, обратитесь к описанию в главе примера)
- (1) Используйте «gcc -I incpath», чтобы указать путь поиска файла заголовка во время компиляции.
- (2) Используйте переменную окружения «C_INCLUDE_PATH», чтобы указать путь поиска файла заголовка во время компиляции.
- (3) Использовать путь поиска заголовка gcc по умолчанию при компиляции.
Описание общих каталогов заголовочных файлов:
/ usr / src / linux / — это путь к исходному коду ядра, а / usr / src / linux / include содержит заголовочный файл ядра, который обычно используется при компиляции модуля.
Путь / usr / include — это в основном заголовочный файл glibc, который используется для компиляции файлов пользовательского режима. Однако / usr / include также содержит папки linux / и asm /, необходимые для заголовочных файлов ядра, но эти две папки в основном используются для совместимости, а / usr все еще используется для заголовочных файлов ядра. / SRC / Linux / включить.
1.5. При настройке кросс-компилятора, каковы конфигурации пути поиска?
При создании кросс-компилятора необходимо обратить внимание на конфигурацию четырех связанных путей: путь файла библиотеки, связанный во время компиляции, путь файла заголовка, используемого во время компиляции, путь двоичного инструмента, используемого во время компиляции, и имя динамического загрузчика, указанного во время компиляции путь.
- (1) Путь к файлу библиотеки, связанному во время компиляции:
Если не указан, это должен быть путь по умолчанию, связанный с путем установки. Если вы хотите указать, вы можете использовать опцию «LIB_PATH» при компиляции ld в binutils:
- (2) Путь к заголовочному файлу, используемому во время компиляции:
- (3) Бинарный путь инструмента, используемый во время компиляции:
Путь двоичного инструмента по умолчанию можно просмотреть с помощью следующей команды:
Используя указанный двоичный инструмент, вы можете использовать опцию «gcc -B»:
- (4) Путь и имя динамического загрузчика, указанного во время компиляции:
Путь и имя динамического загрузчика, жестко запрограммированного в elf, указанного в файле спецификации gcc:
2. Пример операции
Создайте два .c файла:
2.1, путь поиска библиотеки при связывании
Скомпилируйте say.c в libsay.so, а затем скомпилируйте libsay.so при компиляции test.c, чтобы проверить путь поиска в библиотеке, когда gcc связан.
- (1) Используйте «gcc -Llibpath -llibname», чтобы указать путь поиска библиотеки ссылок:
(2) Используйте переменную среды «LIBRARY_PATH», чтобы указать путь поиска библиотеки ссылок:
(3) Используйте «SEARCH_DIR» в сценарии подключения ld, чтобы указать путь поиска библиотеки ссылок:
Используйте команду «ld -verbose», чтобы просмотреть параметр SEARCH_DIR в скрипте ссылок gcc по умолчанию. Конечно, вы также можете использовать «ld -Txxx.lds», чтобы указать скрипт связи.
Скопируйте libsay.so в указанный путь SEARCH_DIR и свяжите тест:
2.2, место поиска библиотеки динамической загрузки во время выполнения
- (1) Используйте «gcc -Wl, -rpath», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения, и жестко закодируйте в ELF-файл параметр «RPATH»:
Используйте файл readelf для просмотра жестко заданного пути поиска библиотеки времени выполнения в файле elf:
- (2) Используйте переменную среды «LD_RUN_PATH», чтобы указать путь поиска библиотеки динамических ссылок во время компиляции, и жестко запишите ее в опцию «RPATH» файла ELF:
- (3) Используйте переменную среды «LD_LIBRARY_PATH», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения:
(4) Используйте файл конфигурации «/etc/ld.so.conf», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения:
(5) Используйте путь поиска по умолчанию «/ lib, / usr / lib» библиотеки динамических ссылок во время выполнения:
Создайте файл .c и файл .h:
2.3 Каковы пути поиска заголовочных файлов при компиляции программы?
(1) Используйте «gcc -I incpath», чтобы указать путь поиска файла заголовка во время компиляции:
(2) Используйте переменную окружения «C_INCLUDE_PATH», чтобы указать путь поиска файла заголовка во время компиляции:
- (3) Использовать путь поиска заголовка gcc по умолчанию при компиляции:
Метод настройки пути поиска файла заголовка Gcc по умолчанию не уточнен. Но вы можете использовать следующую команду для просмотра:
Используйте путь по умолчанию для компиляции:
Источник