С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
15 / 15 / 8
Регистрация: 17.06.2013
Сообщений: 209
1

Подключение заголовочного файла, чтобы использовать функцию sayhello() из первого файла во втором

05.08.2014, 22:22. Показов 2093. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Функция sayhello() находится в файле по адресу
Bash
1
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/
Соответственно по адресу расположены
Bash
1
2
dir
hello.c Makefile Kconfig hello.ko
Всё спокойненько скомпилировано. Ядро о функции знает.

Захожу в директорию
Bash
1
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/
Задача в том, чтобы испоьзовать функцию sayhello() из первого файла во втором

Как правильно указать заголовок подключаемого файла(#include <>), дабы её использовать?

Писать нужно:
- абсолютный адрес(/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/hello.c). Этот вариант у меня не проходит.
- относительный(если, да то относитеьно чего?)
- либо это по другому делается?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
05.08.2014, 22:22
Ответы с готовыми решениями:

Даны 2 файла чисел. Записать в третий файл такие элементы первого файла, которых нет во втором.
Даны 2 файла чисел. Записать в третий файл такие элементы первого файла, которых нет во втором.

Подключение заголовочного файла
При подключении заголовочного файла вылазит ошибка: Код: #include &quot;stdafx.h&quot; #include...

Подключение заголовочного файла
Как подключить правильно заголовочный файл и какие библиотеки подключать в заголовочном файле?

Подключение заголовочного файла QList
Что-то затупил по структуре проекта. есть header.h: #include &lt;QList&gt; ...//код Подключаем...

20
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.08.2014, 22:35 2
-I и путь до места, где деньги заголовочные файлы лежат.
0
15 / 15 / 8
Регистрация: 17.06.2013
Сообщений: 209
05.08.2014, 22:38  [ТС] 3
Цитата Сообщение от Vourhey Посмотреть сообщение
-I
Спасибо за быстрый ответ, но можно пример попросить?

И заголовочный обязотельно должен быть *.h?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.08.2014, 22:39 4
Цитата Сообщение от Allius25 Посмотреть сообщение
но можно пример попросить?
Это опция компилятора. Попробуй сделать сам.
Цитата Сообщение от Allius25 Посмотреть сообщение
И заголовочный обязотельно должен быть *.h?
Нет.
0
15 / 15 / 8
Регистрация: 17.06.2013
Сообщений: 209
05.08.2014, 22:41  [ТС] 5
Цитата Сообщение от Vourhey Посмотреть сообщение
Это опция компилятора
То есть можно в Makefile всё прописать?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.08.2014, 22:41 6
Цитата Сообщение от Allius25 Посмотреть сообщение
То есть можно в Makefile всё прописать?
Нужно.
0
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.08.2014, 22:43 7
Цитата Сообщение от Allius25 Посмотреть сообщение
- абсолютный адрес(/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/hello.c). Этот вариант у меня не проходит.
Если писать

C
#include "/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/hello.c"
то должно подключиться. "Не проходит" - расплывчатая формулировка. Без внятного описания ошибки тут что-то сказать сложно
0
15 / 15 / 8
Регистрация: 17.06.2013
Сообщений: 209
05.08.2014, 22:46  [ТС] 8
Но
C
1
man make
и
C
1
man gcc
говорят Ignore case in all searches. Это ведь игнорирование регистра при поиске, нет?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.08.2014, 22:49 9
Цитата Сообщение от Allius25 Посмотреть сообщение
говорят Ignore case in all searches
Нет.
-I dir
Add the directory dir to the list of directories to be searched for header files. Directories named by -I are searched before the standard system include directories. If the directory dir is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated . If dir begins with "=", then the "=" will be replaced by the sysroot prefix; see --sysroot and -isysroot.
1
15 / 15 / 8
Регистрация: 17.06.2013
Сообщений: 209
05.08.2014, 22:51  [ТС] 10
Evg,
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include </usr/src/linux-2.6.32.62/arch/x86/kernel/hello.c>
 
static int __init hello_init(void)
{
        sayHello();
        return 0;
}
 
static void __exit hello_exit(void)
{
        printk(KERN_INFO"22222222222Goodbye mad world\n");
}
 
module_init(hello_init);
module_exit(hello_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Copyright (c) 2006 by xxxx xxxxx, Inc.");
MODULE_DESCRIPTION("1");



5я строка
Bash
1
2
3
4
5
6
7
8
9
10
11
ubuntu@ubuntu-server:/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2$ sudo make
make -C /lib/modules/2.6.32-30-generic-pae/build M=/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2 modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-30-generic-pae'
  CC [M]  /usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.o
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.c:4:60: error: /usr/src/linux-2.6.32.62/arch/x86/kernel/hello.c: No such file or directory
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.c: In function ‘hello_init’:
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.c:8: error: implicit declaration of function ‘sayHello’
make[2]: *** [/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.o] Error 1
make[1]: *** [_module_/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-30-generic-pae'
make: *** [default] Error 2
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.08.2014, 22:57 11
Цитата Сообщение от Allius25 Посмотреть сообщение
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello.c: No such file or directory
Значит, у тебя нет этого файла. Ты неправильно прописал путь.
1
15 / 15 / 8
Регистрация: 17.06.2013
Сообщений: 209
05.08.2014, 23:02  [ТС] 12
Vourhey, Да, директорию одну пропустил. Спасибо
0
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.08.2014, 23:05 13
У тебя в угловых кавычках, а надо в обычных

Добавлено через 20 секунд
А... ну я так понял, даже с угловыми проканало
0
15 / 15 / 8
Регистрация: 17.06.2013
Сообщений: 209
05.08.2014, 23:09  [ТС] 14
Evg, не, я заметил косяк. Поменял на обычные
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.08.2014, 23:10 15
И с угловыми может работать.
0
15 / 15 / 8
Регистрация: 17.06.2013
Сообщений: 209
06.08.2014, 00:18  [ТС] 16
Тут новый вопрос. Поменял кавычки, добавил папку. Собираю вот выдает.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ubuntu@ubuntu-server:/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2$ sudo make
make -C /lib/modules/2.6.32-30-generic-pae/build M=/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2 modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-30-generic-pae'
  CC [M]  /usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.o
In file included from /usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.c:4:
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/hello.c:6: warning: function declaration isn’t a prototype
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.c:17: error: redefinition of ‘__inittest’
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/hello.c:22: note: previous definition of ‘__inittest’ was here
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.c:17: error: redefinition of ‘init_module’
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/hello.c:22: note: previous definition of ‘init_module’ was here
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.c:18: error: redefinition of ‘__exittest’
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/hello.c:23: note: previous definition of ‘__exittest’ was here
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.c:18: error: redefinition of ‘cleanup_module’
/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/hello.c:23: note: previous definition of ‘cleanup_module’ was here
make[2]: *** [/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2/hello2.o] Error 1
make[1]: *** [_module_/usr/src/linux-2.6.32.62/arch/x86/kernel/hello2] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-30-generic-pae'
make: *** [default] Error 2
hello2.c
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include "/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/hello.c"
 
static int __init hello2_init(void)
{
        sayHello();
        return 0;
}
 
static void __exit hello2_exit(void)
{
        printk(KERN_INFO"22222222222Goodbye mad world\n");
}
 
module_init(hello2_init);
module_exit(hello2_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Copyright (c) 2006 by xxxx xxxxx, Inc.");
MODULE_DESCRIPTION("1");


hello.c
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
 
void sayHello()
{
        printk(KERN_INFO"Hello mad  world\n");
}
EXPORT_SYMBOL(sayHello);
 
static int __init hello_init(void)
{
        sayHello();
        return 0;
}
 
static void __exit hello_exit(void)
{
        printk(KERN_INFO"Goodbye mad world\n");
}
 
module_init(hello_init);
module_exit(hello_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Copyright (c) 2006 by xxxx xxxxx, Inc.");
MODULE_DESCRIPTION("1");


module_init и module_exit в каждом ведь модуле должны быть? если да, то почему на них ругается

Добавлено через 1 час 1 минуту
В таком варианте всё работает
hello2.c
Кликните здесь для просмотра всего текста
C
1
#include "/usr/src/linux-2.6.32.62/arch/x86/kernel/hello/hello.c"
0
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.08.2014, 12:16 17
Извини за идиотский вопрос, а ты язык Си вообще знаешь? Компилятором пользоваться умеешь?
1
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
06.08.2014, 12:42 18
Ничего идиотского. Вопрос вполне себе предсказуемый, как и ответ.
0
15 / 15 / 8
Регистрация: 17.06.2013
Сообщений: 209
06.08.2014, 14:54  [ТС] 19
Evg, не ругайся, с вопросом разобрался ночью, забыл написать.
Си недавно практикую, поэтому и сижу с хеловордами, системными вызовами и директорией прок. постоянно удаляя нарабоки и начинаю сначала, чтобы набить хоть какой то скил
0
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.08.2014, 15:16 20
Компиляция модулей ядра - далеко не самый подходящий способ начинающему для набития скилла
0
06.08.2014, 15:16
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
06.08.2014, 15:16
Помогаю со студенческими работами здесь

Подключение заголовочного файла graphics.h
Привет всем! подскажите как подключить graphics.h в sublime text3 ? Использую с99

Создание и подключение заголовочного файла
Всем привет! Столкнулся с простой но очень интересной проблемой... Создаю новый проект в MVS2012...

Подключение собственного заголовочного файла
В общем есть файл с исходный кодом, который содержит main(). Здесь же подключаю свой заголовочный...

Подключение заголовочного файла std_lib_facilities.h
Здравствуйте. Учу C++ по книге Stroustrup'а. Автор настоятельно просит использовать библиотеку ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru