日期:2014-05-16 浏览次数:20784 次
我们知道在linux下,.so文件相当与windows上的dll文件,即动态链接库。
动态链接库是为了减少发布程序的大小,可以将具有相同功能的code放在动态链接库中,随应用程序一起发布。而对于应用程序来说,只需要知道其接口就可以,在运行时动态的加载代码到内存中,与其相反的是静态链接库。
在接手一个项目的代码后,因为此代码需要很多第三方库,所以,在本机安装这些第三方库之后,我也成功的通过了编译与链接阶段,生成了可以执行的代码。
可是在运行的时候,出现了以下的错误提示:
baiyang@baiyang-Lenovo-G450:~/Desktop$ ./test_cal_features ./test_cal_features: error while loading shared libraries: libCGAL.so.5: cannot open shared object file: No such file or directory
这里涉及几个问题:
1.为何能通过编译与链接,却不能运行?
2.我明明将libCGAL.so.5,安装到了/usr/local/lib下啊,既然能通过编译与链接,应该能找到啊?
3.执行./test_cal_features时,到底发生了什么事?
4.linux下,应用程序如何对.so进行搜索?
但本质问题,就是linux下gcc搜索路径设置问题.
好,今天就一一来回答以上到问题。
plus.c 文件
编译成动态链接库
gcc plus.c -o libfoo.so -shared -fPIC
产生动态链接库libfoo.so
另外写一个main.c文件