Полная ошибка, которую консоль возвращает мне, приведена ниже. Я использую Lubuntu на VirtualBox и VMware (пробовал оба). По какой-то причине он работает на моем ноутбуке, но не на моем рабочем столе. После того, как я попытался узнать больше через множество форумов сообщений, мне кажется, что что-то не так с самой ld в моей системе, но я недостаточно опытен, чтобы понять, что происходит не так. Я знаю, что «1 статус выхода» означает сбой, но это все. Я не знаю, почему это терпит неудачу. Не имеет ничего общего с моим кодом, если он будет работать на одной машине, а не на другой.
Я программирую на ассемблере с использованием компилятора YASM. Скрипт для компиляции находится под кодом ошибки
Код ошибки:
/usr/bin/ld: funcs.o: relocation R_X86_64_32 against `.data' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
Компиляция скрипта:
g++ -g -c $1.cpp -lglut -lGLU -lGL -lm
yasm -g dwarf2 -f elf64 $2.asm -l $2.lst
g++ -g -o $1 $1.o $2.o -lglut -lGLU -lGL -lm
Обратите внимание, что хотя приведенный выше сценарий немного сложнее, простой сценарий, такой как приведенный ниже, также не будет работать.
yasm -g dwarf2 -f elf64 $1.asm
yasm -g dwarf2 -f elf64 $2.asm
gcc -g -o $1 $1.o $2.o
rip
адресации в стиле PIC, либо в качестве быстрого грязного исправления МОЖЕТ быть достаточно поместить-static
в компоновщик, поэтому все эти библиотеки перейдут в исполняемый файл (это не нравится в мире Linux, так как это делает ваш бинарный файл навсегда привязанным к версии libs, с которой он был связан, поэтому такой двоичный файл будет трудно зайти в любой официальный репозиторий). - person Ped7g   schedule 07.03.2017