当前位置: 技术问答>linux和unix
linux下的dllmain函数
来源: 互联网 发布时间:2016-09-12
本文导语: 我先说说情况吧 公司的人在windows下写了一个动态库,这个库里面有几个全局变量是要在dll被装载的时候初始化的,按照他们原来的做法是让dllmain去调用这个初始化函数,现在他们要把这个动态库移到linux下去,而且...
我先说说情况吧
公司的人在windows下写了一个动态库,这个库里面有几个全局变量是要在dll被装载的时候初始化的,按照他们原来的做法是让dllmain去调用这个初始化函数,现在他们要把这个动态库移到linux下去,而且他们不想在改变上层调用(也就是还是让初始化函数自动调用),那么请问linux有像windows下的dllmain函数吗,能在so文件被调用的时候自动调用??如果没有的话那我该怎么办,大家帮我想想 谢谢了!!!
公司的人在windows下写了一个动态库,这个库里面有几个全局变量是要在dll被装载的时候初始化的,按照他们原来的做法是让dllmain去调用这个初始化函数,现在他们要把这个动态库移到linux下去,而且他们不想在改变上层调用(也就是还是让初始化函数自动调用),那么请问linux有像windows下的dllmain函数吗,能在so文件被调用的时候自动调用??如果没有的话那我该怎么办,大家帮我想想 谢谢了!!!
|
就是在加载时加一个初始化函数吧。
可以用__attribute__机制设置函数属性。
把你原来在dllmain中要完成的工作在一个放到一个函数中,
再把这个函数设置成constructor属性。
这样会在你的库被加载时执行。
举个例子:
这样声明。
void __attribute__ ((constructor)) fun_init(void);
需要注意,编译的时候,
需要在gcc命令行参数中加入-Wall参数才呢激活这个功能。
可以用__attribute__机制设置函数属性。
把你原来在dllmain中要完成的工作在一个放到一个函数中,
再把这个函数设置成constructor属性。
这样会在你的库被加载时执行。
举个例子:
这样声明。
void __attribute__ ((constructor)) fun_init(void);
需要注意,编译的时候,
需要在gcc命令行参数中加入-Wall参数才呢激活这个功能。
|
http://tdistler.com/2007/10/05/implementing-dllmain-in-a-linux-shared-library
|
Linux系统中动态链接库的创建与使用
http://www.ccw.com.cn/htm/app/linux/develop/01_8_6_2.asp
Linux下的动态连接库及其实现机制
http://www.bc-cn.net/Article/czxt/linux/200511/1039.html
http://www.ccw.com.cn/htm/app/linux/develop/01_8_6_2.asp
Linux下的动态连接库及其实现机制
http://www.bc-cn.net/Article/czxt/linux/200511/1039.html