.so动态链接文件中可以有main函数吗?

forestzhu 2011-11-30 10:23:54
非常惊悚的发现,一个编译成.so文件的C语言源代码中居然有main函数。
没遇到这种情况,请问这种.so可以正常用吗?
而且这种文件怎么调用?莫非可以直接运行?

...全文
997 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldlight 2011-12-12
  • 打赏
  • 举报
回复
应该会提示你有重复的main吧
wenzheng101 2011-12-02
  • 打赏
  • 举报
回复
.so中有main函数 应该影响不大。
xunxun 2011-12-01
  • 打赏
  • 举报
回复
.so重定位了
入口变了
QQ286540610 2011-12-01
  • 打赏
  • 举报
回复
估计把它作为一个库编译会出问题
gcc -o test test.c -Llibpath -lxxx
应该会报错的。
qq120848369 2011-12-01
  • 打赏
  • 举报
回复 1
可以正常用,.so里的函数和你的程序里函数重名是无所谓的,只会调用到你程序里的函数.

一般是把.so动态加载的,直接去对应的库里找对应的函数,毕竟只是个工具,不用想的太深。

#include <dlfcn.h>

void *dlopen(const char *filename, int flag);

char *dlerror(void);

void *dlsym(void *handle, const char *symbol);

int dlclose(void *handle);

Link with -ldl.

#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>

int main()
{
void (*ptr_func)() = NULL;
void *handle = NULL;

if ((handle = dlopen("libmain.so", RTLD_LAZY)) == NULL)
{
return 1;
}

dlerror();

if ((ptr_func = (void (*)())dlsym(handle, "test")) == NULL)
{
const char *err;
err = dlerror();

if (err != NULL)
{
printf("error:%s\n", err);
}

return 2;
}

ptr_func();
dlclose(handle);

return 0;
}

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧