Linux程序编译、运行的问题
1.静态编译与动态编译
使用gcc时,若不主动添加-static选项,那么默认是按照动态编译程序的
2.静态编译与动态编译的区别
静态编译:在进行链接时,使用的是静态库(linux下是.a文件),将其链接到程序中去
动态编译:在进行链接时,使用的是动态库(linux下是.so文件)(这么说好像不精确,因为在链接时,实际上只是将使用到的动态库的文件名加到程序中去)
3.采用静态编译与采用动态编译在运行时的区别
静态编译的程序在运行时不再需要去查找所使用的静态库,因为其已经被链接到程序中去了;
动态编译的程序在运行时需要在运行环境中去查找所使用的动态库,若查找失败,则会出现错误,程序无法运行;
4.如何查找动态库
(1)/lib和/usr/lib这两个目录是默认的查找路径;
(2)也可以将其他路径添加到/etc/ld.so.conf文件中(程序实际上是跟据此文件所生成的/etc/ld.so.cache去查找的)修改完此文件后,需要运行ldconfig命令更新
(3)也可以在编译时指定路径:-Wl,-rpath,library_path(注意此选项指定的是运行时的库位置,而不是链接时库的位置,虽然它们都在同一目录下)
(4)也可以指定环境变量:LD_LIBRARY_PATH