当前位置: 技术问答>linux和unix
关于so文件:为什么替换了之后没有作用?
来源: 互联网 发布时间:2016-02-06
本文导语: 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 使...
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=%dn");
}
编译:
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.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=%dn");
}
编译:
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文件,调用的函数返回不同的结果?
谢谢!
|
祝贺dai_weitao(疯狂Linux C++社区) 穿五裤衩了,散点分吧!
|
对, 去掉-c.
|
你指定的库就是mylib,只要你的.so文件经过编译后,只要你的程序用的这个so,你就需要重新编译一下你的文件才可以!当然你说那个可以采取一个接口的方式进行向你SO传值来达到你的目的。
|
好像是需要重新编译myapp的吧.
|
编译myapp.c文件时,使用-share,这样才是动态连接,下次替换.so就起作用了。
但要注意,.so必须是LD_LIBRARY_PATH变量能搜索到的,要不然就使用dlopen之类的
函数。
但要注意,.so必须是LD_LIBRARY_PATH变量能搜索到的,要不然就使用dlopen之类的
函数。