2009-09-01 1 views
2

Я пытаюсь запустить простую программу на встроенной системе powerpc без какой-либо операционной системы. Я использую инструменты компилятора-компоновщика GNU и PSIM в качестве симулятора. Я написал свой собственный очень простой файл директивы Linker.Как предотвратить динамическое перемещение (rela.dyn)?

Я использовал глобальную переменную в своей статической библиотеке и хочу использовать эту переменную в своей примерной программе. Но при связывании примера программы GNU ld появляется ошибка и останавливается. В нем говорится, что он не может найти rela.dyn в файле директивы компоновщика. На самом деле я не хочу использовать динамически перемещаемую библиотеку, потому что у меня нет динамического загрузчика. Что я делаю не так?

+1

Я использовал -nostartfiles -nodefaultlibs -nostdlib -статические флаги при соединении. -ffreestanding требует -shared флаг, который не подходит для моего приложения –

ответ

0

Трудно сказать без дополнительной информации. Если у вас нет базовой ОС, вы использовали -ffreestanding, чтобы избежать связывания в среде выполнения платформы?

Редактировать: -ffreestanding требует -shared? -ffreestanding означает компиляцию в не-размещенную среду. Как такое окружение может поддерживать общие библиотеки?

+0

На самом деле это так, я пробовал и видел результат ... –

+0

Забавный. Я выхожу на этот момент (-выполнение не должно этого делать, но я не работал на вашей конкретной платформе, поэтому я не могу судить); возможно, после того, как совет Джеймса Моллой (ld -v) доставит вас дальше. – DevSolar

+0

Должно быть правило против голосования вниз, не оставляя комментариев относительно того, что в ответе считается не полезным. : - / – DevSolar

0

-ffreestanding, как утверждает Solar. Если это не удается, запустите ld с параметром --verbose, чтобы увидеть, к чему именно он пытается подключиться: это позволит вам дополнительно отлаживать.