Почему удвоение не работает в MINIX 3?

Я работаю над MINIX 3. Я изменил планировщик процессов и теперь хочу провести там небольшое тестирование.

Проблема в том, что когда я хочу использовать double, я получаю сообщение об ошибке. Интересно то, что если я объявляю и инициализирую double variable в глобальном классе в классе, это не показывает ошибку, но когда я хочу использовать тот же самый double variable внутри метода и пытаюсь скомпилировать MINIX 3 (версия 3.1.6 ) Я получаю эту ошибку:

/usr/lib/em_led: /usr/lib/i386/libc.a(exit.o): multiply defined (error)
Undefined:
     _test_variable (<---- the name of the variable is "test_variable")
make in /usr/src/kernel: Exit code 1
make in /usr/src/tools: Exit code 1
make: made 'image' look old

Это происходит, когда я использую команду make hdboot в /usr/src/tools, которую я использую после make install

Кто-нибудь знает, в чем здесь проблема?

ОТРЕДАКТИРОВАНО

Код:

FORWARD _PROTOTYPE( struct proc * pick_proc, (void));
FORWARD _PROTOTYPE( void enqueue_head, (struct proc *rp));
double test_variable;

//(the Variable **test_variable** one is Declared on TOP of the class after the Includes and after the declarations of the Methods 

PRIVATE struct proc * pick_proc(void)
{
    register struct proc *rp;           /* process to run */
int q;              /* iterate over queues */
int proceset;
proc_nr_t proci;
if (first_time == 1)
{
    test_variable = 6.5;
}

person user3774470    schedule 01.12.2015    source источник
comment
Вы показываете две конфликтующие ошибки: multiply defined (error) и Undefined: _test_variable. Ни один из них не относится к variable. Итак, вам нужно показать свой код — где вы думаете, что определяете test_variable, а затем беспокоитесь о том, почему вы получаете несколько определенных проблем одновременно. Компиляторы обычно добавляют начальное подчеркивание к вашим именам переменных.   -  person Jonathan Leffler    schedule 01.12.2015
comment
@JonathanLeffler, я отредактировал свой пост. Пожалуйста, взгляните на код   -  person user3774470    schedule 01.12.2015
comment
Вы дали предварительное определение test_variable; обычно этого достаточно. Вы можете подумать об использовании double test_variable = 6.5;, что может даже означать, что вам не нужна переменная first_time, определение которой также не показано.   -  person Jonathan Leffler    schedule 01.12.2015
comment
Это было сделано только для целей тестирования first_time, потому что pick_proc вызывается из каждого процесса. Поэтому я просто хотел инициализировать один раз. Проблема, как уже упоминалось, заключается в том, что я не могу инициализировать внутри метода... и мне НУЖНО инициализировать внутри метода. Мне не нужна СТАТИЧЕСКАЯ переменная с тем же значением, мне нужно изменить и манипулировать значением этой переменной   -  person user3774470    schedule 01.12.2015
comment
ХОРОШО. Мне жаль, что я больше не могу помочь. Я недостаточно работал над Minix, чтобы иметь хорошие идеи. То, что ты делаешь, выглядит более-менее кошерно, и я не знаю, что происходит.   -  person Jonathan Leffler    schedule 01.12.2015
comment
Ваша переменная test_variable определена в файле .c или просто объявлена в файле .h? У вас возникнет та же проблема, если вы замените «двойное» на «целое» или «плавающее»?   -  person Mathieu    schedule 04.12.2015


Ответы (1)


  1. попробуйте переименовать свою переменную и сделать ее тоже static.

  2. Я не могу гарантировать это конкретно в отношении MINIX-3, но могу поспорить, что вы, вероятно, не сможете использовать числа с плавающей запятой внутри планировщика или любой другой основной подсистемы, сервера, драйвера или ядра (используйте int или long).

person Greg A. Woods    schedule 27.01.2016