您的位置:首页 > 其它

gcc.g++ 编译调用共享库 静态库

2013-10-24 18:48 302 查看
生成共享库 要先生成目标文件 然后才能生成共享库

第一步:g++ -c *.cpp -I ../inc -g -Wall  //编译生成目标文件.o -I是指定要包含的头文件 -g 在目标文件中包含debug信息 -wall 打开所有警告信息

第二步:g++ -shared say_hello.o say_goodbay.o -o ../lib/libspeak.so //把say_hello.o和say_goodbay.o编译生成共享库文件libspeak.so

第二步:ld ­G ­o  say_goodby.o say_hello.o ../lib/libspeak.so

--------------------------------------------------------------------------------------------------------------------

生成静态库, 也是先生成目标文件 然后才能生成静态库

第一步:g++ ­c say_goodbye.cpp ­I"../inc"    //-I就是指定所要需要

       g++ ­c say_hello.cpp ­I"../inc"  //生成两个.o文件

第二步:ar ­r  say_goodbye.o say_hello.o ../lib/libspeak_a.a   //生成静态库  后面是生成路径

--------------------------------------------------------------------------------------------------------------------

//共享库是你编译的时候要用到他,运行的时候也要用到他,因为你程序的一部分功是在共享库里面,运行时也依赖于这个库,

//静态库是你编译用到他,但是运行时不会用到他,因为你那个可执行程序已经拷贝到你的可执行程序中啦, 就不需要你说的那个库啦;

调用共享库:

第一种形式:g++ ­ test_drv.cpp ­-o test_drv -I"../inc" -l speak ­-L"../lib" //g++编译test_drv.cpp生成test_drv可执行程序,指定调用../目录下的下的speak库

//运行的时候,要调用共享库   //导入环境变量

export LD_LIBRARY_PATH="../lib:$LD_LIBRARY_PATH"

--------------------------------------------------------------------------------------------------------------------

调用静态库

第一种:

g++ -­o test_drv test_drv.cpp ­-I"../inc" ­-L"../lib" lspeak_a  //编译test_drv.cpp文件生成test_drv 指定要包含的头文件目录../inc,要链接../inc目录下的speak库

第二种:

g++ -­o test_drv test_drv.cpp ­-I"../inc" ../lib/libspeak_a.a  // //直接指定

//运行的时候不要库的依赖

-l//连接到共享库  

-L指定连接的库所在的路径  其默认制定/usr/lib 、 /usr/local/lib 或由 LD_LIBRARY_PATH 指定的目录下 ,也就是说你不加也默认搜索这些库

--------------------------------------------------------------------------------------------------------------------

//

-64系统编译的库或者可执行文件时,要加 -fpic选项
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: