Использование List.h в файлах C, Ubuntu10.10 - PullRequest
1 голос
/ 11 февраля 2011

Я использую Ubuntu 10.10 на компьютере IBM R51. Когда я получаю доступ к list.h, чтобы прочитать его (вручную / по-человечески), я открываю /usr/src/linux-headers-2.6.35-22/include/linux.

Но при кодировании C-программы в терминале я не могу вызвать любой #include, потому что он не находится в папках по умолчанию / usr / include.

Когда я изменяю инструкцию для отображения пути, набирая #include "/usr/src/linux-headers-2.6.35-22/include/linux/list.h", он возвращает ошибки, поскольку list.h по очереди вызывает другие заголовочные файлы, которые упоминаются как находящиеся в папке "linux" Заголовочные файлы, как вы должны знать: "linux / toxic.h", "linux / prefetch.h" и "asm / system.h"

Так что, если мне нужно скопировать каждую из них, я могу поочередно вызывать предварительную выборку, вызывая другие зависимости, которых нет в каталоге / usr / include. Я надеюсь, вы понимаете.

Как я могу решить эту проблему?

Ответы [ 3 ]

1 голос
/ 11 февраля 2011
  • добавление -I/usr/src/linux не допускается, поскольку неанализованные заголовочные файлы не предназначены для использования в пользовательских программах
  • Вы можете вручную скопировать list.h в свой собственный проект и очистить
  • или используйте библиотеку, специально предназначенную для пользовательского пространства и обеспечивающую те же функциональные возможности (поскольку вы уже использовали libHX в другом месте, возможно, вы захотите продолжить чтение в главу по связанному списку)
1 голос
/ 11 февраля 2011

Используемые вами заголовочные файлы предназначены для внутреннего использования ядра Linux.Они не были предназначены для использования программой пользователя.

Если вы ДОЛЖНЫ использовать эти заголовки (реализация списка ядра Linux is brilliant), скопируйте заголовки висходный каталог вашей программы.Скопируйте каждый файл, на который есть ссылка, отредактируйте каждый, чтобы удалить любые предположения об использовании в ядре, и повторяйте до тех пор, пока вы не закончите.Я мог бы предложить создать свой собственный макрос prefetch(), который просто ничего не делает, вместо того, чтобы пытаться распутать <linux/prefetch.h>.Сделайте то же самое для <linux/poison.h> и распутайте <linux/types> и <linux/stddef.h> (здесь не так уж сложно :) как можно лучше.

А также убедитесь, что вы лицензировали свой проект GPLv2 (и, в частности, GPLv2,Файл COPYING ядра Linux является довольно строгим, поскольку GPLv2 является единственной применимой лицензией, ведутся споры о том, разрешает ли GPL указывать только одну версию, но какую лицензию Линус выбрал давным-давно, и лицензию, которая действительна для всех файлов, если не указано иное).

1 голос
/ 11 февраля 2011

Вы уверены, что эти заголовки действительно то, что вам нужно? Стандартные заголовки C должны находиться в / usr / include

В любом случае вам нужно передать путь поиска заголовка компилятору через флаг '-I'.

Пройдите путь через -I

-I/usr/src/linux-headers-2.6.35-22/include/linux

Тогда в вашем коде C

#include "list.h"

Ссылка на руководство GCC и директивы препроцессора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...