如何更新linux系统动态链接库/usr/local/lib/usr/lib?
可以放在当前目录下,但是要设置一下库文件的路径:LD_LIBRARY_PATH=./:/usr/local/pet20/lib:/lib/:/usr/local/lib export LD_LIBRARY_PATH 这样,在调用的时候就会自动从当前目录找。
如果是显式调用则不用,只要在程序里指定.so的文件路径就可以了。所以放在当前目录下也是没问题的。
linux标准库是动态还是静态?
编译器的默认设置是连接动态库,这就要求在程序执行的时候需要的动态库必须存在。改变编译选项可以变为静态连接,这样生成的程序运行时不需要库的支持,但是文件的尺寸一般较大。
linx的C标准库都有,看你自己喜欢哪样用哪样。
当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。
然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。
linux下的动态链接库和静态链接库到底是个什么鬼?
动态库和静态库都是一组函数集合,打包在一起供应用程序调用,区别是:静态库名称一般为xxx.a,在编译时和应用程序链接在一起,这样的应用程序占用空间较大。动态库名称一般为xxx.so,对于动态库即可以在编译时链接,也可以使用dlopen()/dlsym()/dlclose()函数在运行时调用,后种方式占用空间较小,且可以实现动态库在进程间共享,只在内存中保留一份,减少了内存开销。