LINUX.ORG.RU

dlopen libpthread


0

1

Падает программа при попытке динамически открыть библиотеку pthread. С остальными либами всё нормально. Падает с segmentation fault - т. е. so-шку находит. В чём может быть проблема?



Последнее исправление: cetjs2 (всего исправлений: 2)
$ cat main.c 
#include <stdio.h>
#include <dlfcn.h>

int main(int argc, char* argv[])
{
  printf("start\n");
  void* lib = dlopen("libpthread.so.0", RTLD_NOW);
  printf("lib=%x\n",(int)lib);
  return 0;
}
$ gcc main.c -o run -ldl
main.c: В функции «main»:
main.c:8:21: предупреждение: приведение указателя к целому другого размера [-Wpointer-to-int-cast]
$ ./run
start
lib=c86040
anonymous
()

Код программы в студию!

buddhist ★★★★★
()
Ответ на: комментарий от tff

http://www.linuxselfhelp.com/gnu/libtool/html_chapter/libtool_9.html

The following problems are not solved by using libtool's dlopen support:
Dlopen functions are generally only available on shared library platforms. If you want your package to be portable to static platforms, you have to use either libltdl (see section Using libltdl) or develop your own alternatives to dlopening dynamic code. Most reasonable solutions involve writing wrapper functions for the dlopen family, which do package-specific tricks when dlopening is unsupported or not available on a given platform.

http://www.qnx.com/developers/docs/6.3.2/neutrino/lib_ref/d/dlopen.html

The dlopen/() function is available only to a dynamically-linked process. A statically-linked process (one where libc is linked statically) can't call dlopen() because a statically-linked executable:

  • doesn't export any of its symbols
  • can't export the required structure for libraries to link against
  • can't fill structures at startup needed to load subsequent shared objects.
anonymous
()
Ответ на: комментарий от anonymous

Это, конечно здорово, но почему остальные библиотеки открываются и работают нормально при такой же статической линковке, а pthread нет?

tff
() автор топика
Ответ на: комментарий от gag

Я так понял что libltdl это просто обёртка над существующими способами открытия библиотек. В любом случае на простейшем примере она требудет dlopen и точно так же крашится... Хотя возможно я что-то не так делаю.

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