$ 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应用程序,它更易于调试。并且不需要有多个项目,静态库和依赖关系。 – 2010-10-05 01:11:43