关于so文件:为什么替换了之后没有作用?
so文件的代码以及编译如下:
//mylib.h:
#ifndef __PARAMDEF_H__
#define __PARAMDEF_H__
#define MYPARAM 1
#endif
//mylib.c:
#include "mylib.h "
int getParam()
{
return(MYPARAM);
}
编译:
gcc -c mylib.c -fPIC -shared -o /lib/libmylib.so
使用mylib.so的程序myapp.c:
int main()
{
int i;
i = getParam();
printf( "param=%d\n ");
}
编译:
gcc -c -L -lmylib myapp.c -o myapp
现在的问题是这样:
我编译好之后执行,结果是param=1;
然后我修改mylib.h,将MYPARAM改为0,再编译mylib.so,这个时候再执行myapp,结果还是param=1;
也就是说,替换mylib.so没有作用,要重新编译myapp结果才是param=0。
我想问的是:so文件能不能像我设想的那样使用,也就是说,使用宏定义不同的so文件,调用的函数返回不同的结果?
谢谢!
------解决方案--------------------你指定的库就是mylib,只要你的.so文件经过编译后,只要你的程序用的这个so,你就需要重新编译一下你的文件才可以!当然你说那个可以采取一个接口的方式进行向你SO传值来达到你的目的。
------解决方案--------------------好像是需要重新编译myapp的吧.
------解决方案--------------------编译myapp.c文件时,使用-share,这样才是动态连接,下次替换.so就起作用了。
但要注意,.so必须是LD_LIBRARY_PATH变量能搜索到的,要不然就使用dlopen之类的
函数。
------解决方案--------------------对, 去掉-c.
------解决方案--------------------祝贺dai_weitao(疯狂Linux C++社区) 穿五裤衩了,散点分吧!