日期:2014-05-16  浏览次数:21321 次

关于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++社区) 穿五裤衩了,散点分吧!