The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"dlopen, dlsym, dlclose..."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"dlopen, dlsym, dlclose..."
Сообщение от sergmsr emailИскать по авторуВ закладки on 17-Янв-02, 13:19  (MSK)
есть foo.cpp:
int main()
{
  void *dllptr;
  int (*mmm)(void);

  dllptr = dlopen("/home/sergmsr/ts/src/plugins/dl.so", RTLD_LAZY);
  mmm = (int (*)(void))dlsym(dllptr, "hello");
  mmm();
  dlclose(dllptr);
  return 0;
}

Собираю: gcc -Wall foo.cpp -ofoo -ldl

есть test.cpp:
#include <stdio.h>
int hello()      
{                
  printf("F");    
  return 33;      
}                
Собираю:
export LD_LIBRARY_PATH=`pwd`
gcc  -c -fpic test.cpp
gcc -shared -lc  -o test.so  test.o

после чего запускаю foo.cpp и получаю segmentation fault (core dumped).
операционка RedHat 7.1
в чем может быть проблема???

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: dlopen, dlsym, dlclose..."
Сообщение от Soldier Искать по авторуВ закладки on 17-Янв-02, 16:23  (MSK)
>есть foo.cpp:
>int main()
>{
>  void *dllptr;
>  int (*mmm)(void);
>
>  dllptr = dlopen("/home/sergmsr/ts/src/plugins/dl.so", RTLD_LAZY);
>
>  mmm = (int (*)(void))dlsym(dllptr,
>"hello");
>  mmm();
>  dlclose(dllptr);
>  return 0;
>}
>
>Собираю: gcc -Wall foo.cpp -ofoo -ldl
>
>
>есть test.cpp:
>#include <stdio.h>
>int hello()
>{
>  printf("F");
>  return 33;
>}
>Собираю:
>export LD_LIBRARY_PATH=`pwd`
>gcc  -c -fpic test.cpp
>gcc -shared -lc  -o test.so
> test.o
>
>после чего запускаю foo.cpp и получаю
>segmentation fault (core dumped).
>операционка RedHat 7.1
>в чем может быть проблема???

A vi zaglyanite vo vnutr' fail-a test.so (ili dl.so, tak ya i ne ponyal chto vi konkretno kompilite) i poprobuyte tam nayti simvol "hello" - vzamen vi naydete chto to tipa "hello_fV". Ukazhite vmesto "hello" etot simvol i vse uvas poluchitsya (nadeyus'). Yasno teper' pochemu "viletaet"?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: dlopen, dlsym, dlclose..."
Сообщение от Арлекин Искать по авторуВ закладки on 17-Янв-02, 17:59  (MSK)
> Собираю:
> export LD_LIBRARY_PATH='pwd'
> gcc  -c -fpic test.cpp
> gcc -shared -lc  -o test.so  test.o

Я могу ошибаться, т.к. гнутым не пользуюсь и в Линухе не работаю, но я не нашел указания собрать библиотеку dl.so.
СПАРКовский компилер требует ЭТО явно указать и я сильно сомневаюсь, что гнутый делает что-то по умолчанию.
И если я прав, в dl.so, если она ТАМ есть, может и не быть никакого hello вообще. Ну и с указателями надо полегче - проверяй mmm на NULL перед вызовом. dlsym, если не найдет точку входа вернет нул и ты передашь управление в никуда = SIGSEGV (11)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: dlopen, dlsym, dlclose..."
Сообщение от sergmsr emailИскать по авторуВ закладки on 18-Янв-02, 11:52  (MSK)
>> Собираю:
>> export LD_LIBRARY_PATH='pwd'
>> gcc  -c -fpic test.cpp
>> gcc -shared -lc  -o test.so  test.o
>
>Я могу ошибаться, т.к. гнутым не
>пользуюсь и в Линухе не
>работаю, но я не нашел
>указания собрать библиотеку dl.so.
>СПАРКовский компилер требует ЭТО явно указать
>и я сильно сомневаюсь, что
>гнутый делает что-то по умолчанию.
>
>И если я прав, в dl.so,
>если она ТАМ есть, может

dl.so это опечатка. вместо нее test.so
>и не быть никакого hello
>вообще. Ну и с указателями
>надо полегче - проверяй mmm
>на NULL перед вызовом. dlsym,
>если не найдет точку входа
>вернет нул и ты передашь
>управление в никуда = SIGSEGV
>(11)


  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: dlopen, dlsym, dlclose..."
Сообщение от Арлекин Искать по авторуВ закладки on 18-Янв-02, 13:39  (MSK)
Командой ( Solaris )
/usr/ccs/bin/ld -s _имя_.so_файла
можно посмотреть правильно ли ты собрал либу.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: dlopen, dlsym, dlclose..."
Сообщение от Soldier Искать по авторуВ закладки on 19-Янв-02, 10:59  (MSK)
>Командой ( Solaris )
>/usr/ccs/bin/ld -s _имя_.so_файла
>можно посмотреть правильно ли ты собрал
>либу.

U-f-f. Chego vi ogorod gorodite? Vse gorazdo prosche. Dayu tol'ko ukazanie, a pochemu ono tak ili inache, sami razbiraytes'.

Prezhde vsego pereimenuyte *.cpp v *.c (VAZHNO!).
Pomestite faile test.c i foo.c v odnoy direktorii i v dlopen ukazhite "./test.so" .

Dalee
1) gcc -shared -o test.so test.c
2) gcc -o foo foo.c

I VSE!!!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: dlopen, dlsym, dlclose..."
Сообщение от Soldier Искать по авторуВ закладки on 19-Янв-02, 11:04  (MSK)
>2) gcc -o foo foo.c
Sorry, t.e.
gcc -o foo -ldl foo.c

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру