Страниц: [1]
  Печать  
Автор Тема: access 2 shared libraries  (Прочитано 2398 раз)
Exfector
Гость
« : Февраля 16, 2003, 07:15:00 pm »

следущая проблема: После сборки *.o в *.exec_elf средством <ld> и запуска, получаю сообщение об ошибке <Can't access shared library>. Речь идёт о классике <Hello World> написанном на ассемблере.
Вот исходник:

;-- hello_world.nasm ------
global main

extern printf
;-- EOS ----------
section .text use32 align=4
main:  
       push dword msg0
       call printf
       retn
;-- EOS ----------
msg0            db      "Hello World","
"
;-- EOF -------------------

Как видете изпользуеться всего одна внешняя функция printf() находящаяся в libc. Далее:
$ nasm -g -felf hello.nasm -o hello.o
$ ld -e main hello.o -o hello /lib/libc.so.2
$ ./hello
Can't access shared library

$ gcc hello.o -o hello_gcc
$ ./hello_gcc
Memory fault (Core dumped)
(

При изпользовании puts() вместо printf() - всё получаеться, опять же только средством gcc.
$ gcc hello_puts.o -o hello_puts_gcc
$ ./hello_puts_gcc
Hello World!
$ ld -e main hello_puts.o -o hello_puts /lib/libc.so.2
Can't access shared library


Исход сборки и запуска элемента с mkdir() эквивалентен printf().
За любые соображения по данной задаче - безконечно благодарен!

Пара вопросов:
#1/ Как можно включать функции монолитно ?
#2/ Существуют ли ещё какие-либо сборщики ?

TIA





       
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #1 : Февраля 17, 2003, 11:25:00 am »


Exfector много чего пишет:


Eeeeek !!!

Родной as попробывать нужно было. К сожалению http://www.linuxassembly.org почил с миром, но может где еще и остался ...

P.S. О !!! он переехал сюда http://linuxassembly.org/ . Вот с него и стоит начать изучение ...

Также можно качнуть весь сайт в одном флаконе http://linuxassembly.org/la.tar.bz2 тут.


[ Это Сообщение было отредактировано: lestat в 2003-02-17 08:26 ]
Записан

Страниц: [1]
  Печать  
 
Перейти в: