@DVoropaev
Ставлю + к карме на хабре за ответы на вопросы

Почему ассемблерный код (GNU assembler) компилируется на одной машине, но не компилируется на другой?

.hello_str:
	.string	"Hello, GAS!"
	.globl	main
	.type	main, @function
main:
	movl	$.hello_str, %edi
	call	puts@PLT
	movl	$0, %edi
	call	exit@PLT

компилирую так:
gcc -o a.out ./1_1.s
На обоих машинах стоит 64битная убунта.
На одном компилируется, на другом ругается.
gcc -o a.out ./1_1.s
/usr/bin/ld: /tmp/ccTxc4Ax.o: relocation R_X86_64_32 against `.text' can not be used when making a PIE object; перекомпилируйте с параметром -fPIC
/usr/bin/ld: final link failed: Раздел, непредставимый для вывода
collect2: error: ld returned 1 exit status

Параметр -fPIC не помогает
$ gcc -fPIC -o a.out ./1_1.s
/usr/bin/ld: /tmp/ccbz8Upi.o: relocation R_X86_64_32 against `.text' can not be used when making a PIE object; перекомпилируйте с параметром -fPIC
/usr/bin/ld: final link failed: Раздел, непредставимый для вывода
collect2: error: ld returned 1 exit status
  • Вопрос задан
  • 217 просмотров
Пригласить эксперта
Ответы на вопрос 2
@tutuborg
Сравнить список и версии установленного ПО.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
$ gcc -fPIC -o a.out ./1_1.s
Параметр -fPIC не помогает

DVoropaev у тебя уже был такой вопрос, ответ с тех пор не изменился: -fPIC изменяет ассемблерный вывод компилятора, на готовый ассемблерный файл этот ключ никак не влияет.

movl $.hello_str, %edi

Этот код -- 32-битный, компилируй его с ключом -m32.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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