$ chmod +x libsomelibrary.so
$ ./libsomelibrary.so
Segmentation fault
$ gcc -O2 http://vi-server.org/vi/bin/rundll.c -ldl -o rundll
$ ./rundll ./libsomelibrary.so main
(application starts normally)
Почему я не могу просто начать libsomelibrary.so, если он имеет полезную точку входа?Почему я не могу напрямую запустить общую библиотеку в Linux?
rundll.c
тривиальна:
void* d = dlopen(argv[1], RTLD_LAZY);
void* m = dlsym(d, argv[2]);
return ((int(*)(int,char**,char**))m)(argc-2, argv+2, envp);
Почему не используется внутренне при попытке загрузить двоичный файл?
Эта функция полезна: как библиотека это NS плагин, но если это «главный» начал это просто настольное приложение GUI, который проще в отладке. И нет необходимости иметь несколько проектов, статические библиотеки и зависимости. –