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

posted @ 2011-04-15 15:44  Peter_Wu  阅读(395)  评论(0编辑  收藏  举报