LINUX.ORG.RU

Как в fasm использовать библиотеку?


0

1

Есть библиотека libhello.so с функцией

void hello()
{
    printf("Hello\n");
}
Вот результат работы readelf -s, дабы убедится что функция hello() есть и ее можно вызвать:
    Num:   Value       Size  Type  Bind   Vis       Ndx    Name
    .
    .
    22:    00000dd0    34    FUNC  GLOBAL DEFAULT   11     hello
    .
    .
Пробовал использовать либу так:
format ELF
								
section '.text' executable 

extrn hello

public _start	

_start: 
	call hello

	mov eax, sys_exit
	mov ebx, 0
	int 0x80
	
	ret

Собираю так:
fasm main.asm
ld -m elf_i386 -ohello main.o -L. -lhello

Все собирается без ошибок, но получается на выходе файл, который вообще не открывается (права на исполнение есть)

Если делать так:

fasm main.asm
ld -m elf_i386 -ohello main.o -L./libhello.so
Получаю:
ld -m elf_i386 -o hello main.o -L./libhello.so
main.o: In function `_start':
(.text+0x1): undefined reference to `hello'

Как правильно пользоваться функциями из библиотеки?
Спасибо.

Ответ на: комментарий от IPR

Извините, что ошибся разделом, надеюсь модератора не затруднит перенести тему.
Разобрался. Проблема решилась следующим образом:

fasm main.asm
gcc -ohello -nostartfiles main.o -L. -lhello

Glaciuse
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.