C / C ++ компоновщик CALL16 перемещается в xxxxx не против глобального символа - PullRequest
3 голосов
/ 05 февраля 2009

Я получаю эти ошибки при компоновке, оба сообщения имеют отношение к одному и тому же объектному файлу.

CALL16 reloc at 0x5f8 not against global symbol

и

could not read symbols: Bad value

Второе сообщение, по-видимому, является причиной того, что я получаю ошибку CALL16, но файл компилируется просто отлично.

Какие-нибудь советы по исправлению этой проблемы?

К вашему сведению, я кросс-компилирую для цели MIPS и использую gcc 4.1.2

РЕДАКТИРОВАТЬ: Пока не повезло:
Вот мои флаги, используемые: -fPIC, -Wl, -rpath, -Wl, -O1

Я также безуспешно пробовал следующее:
-mno-явный-перемещения
-mexplicit-relocs
-mong-звонки
-мнолонг-звонки
-mxgot
-mno-xgot


Тем временем я вернусь к источнику и выясню подробнее.

Ответы [ 2 ]

3 голосов
/ 07 февраля 2009

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

Здесь была проблема:

Произошло предварительное объявление / прототип функции.

void FooBarIsBest(void);

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

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

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

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

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

1 голос
/ 05 февраля 2009

Попробуйте флаг -mlong-Call для компилятора.

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

...