读书人

关于so文件:为什么替换了之后没有作用

发布时间: 2012-02-12 17:16:34 作者: rapoo

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

读书人网 >UNIXLINUX

热点推荐