как избежать & ldquo; CALL16 reloc не против глобального символа & rdquo; для функции, определенной в сборке с gcc на mips [duplicate]

Для достижения этого поведения вы должны использовать globals() встроенный метод :

def var_of_var(k, v):
    globals()[k] = v

print variable_name # NameError: name 'variable_name' is not defined
some_name = 'variable_name'
globals()[some_name] = 123
print variable_name # 123

some_name = 'variable_name2'
var_of_var(some_name, 456)
print variable_name2 # 456

3
задан Steve Lazaridis 5 February 2009 в 21:48
поделиться

2 ответа

Ага! Спасибо моему коллеге, мы обнаружили проблему.

В этом была проблема:

Было объявлено / прототип функции.

void FooBarIsBest(void);

Позже в файле была определена функция.

static void FooBarIsBest(void)
{
    // do the best
} 

Проблема здесь заключалась в том, что в прототипе ключевое слово static было опущено. Таким образом, это было похоже на определение целой новой функции.

Ссылка CALL16 используется gcc для перемещаемого кода. Код сборки файла показал, что CALL16 используется для этой функции ... Что неправильно, поскольку эта функция является локальной.

Интересно, что этот код использовался для компиляции & amp; link просто отлично с более старой версией gcc (3.2.2). Еще один ученый. :)

3
ответ дан Steve Lazaridis 20 August 2018 в 15:05
поделиться

Попробуйте использовать флажок -mlong-calls для компилятора.

Также см. руководство для более конкретных опций MIPS.

1
ответ дан INS 20 August 2018 в 15:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: