首页 > 代码库 > c/c++ 编译so与动态加载so
c/c++ 编译so与动态加载so
c文件filea.c:
#include <stdio.h> void fun1() { printf("i am from filea fun1 \n"); }
c文件fileb.c:
#include <stdio.h> void fun2() { printf("i am from fileb fun2 \n"); }
测试文件testso.c
void fun1(); void fun2(); int main(int argc,char *argv[]) { fun1(); fun2(); return 0; }
1.将filea.c fileb.c编译成so库供testso.c调用,命令如下:
gcc -Wall -fpic -shared filea.c fileb.c -o first.so
2.编译testso.c并链接共享库first.so
gcc -Wall testso.c first.so -o testso
3.执行。
此时,执行./testso 将会抛出./testso: error while loading shared libraries: first.so.0:cannot open shared object file: No such file or directory
程序 testso已经完成,但要运行它必须让其能定位到共享库 first.so,因为库中的函数要在程序运行时被加载。 需要注意的是,当前工作目录可能不在共享库的查找路径中,因此需要使用如下的命令行设定环境变量LD_LIBRARY_PATH:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
再次执行./testso,输出正确结果:
c/c++ 编译so与动态加载so
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。