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选项
第一步: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选项
相关文章推荐
- 堆排序----(排序算法六)
- 教你使用shell数组
- 图形学 Direct3D的3D模型处理1
- 堆排序----(排序算法六)
- MySQL数据备份之mysqldump使用
- Nginx 负载均衡模块 ngx_http_upstream_module 详述
- Nginx 负载均衡模块 ngx_http_upstream_module 详述
- sql字符串处理
- 哈希表
- Linux chmod授权命令说明
- float类型
- java:日期相关Date,Calendar,SimpleDateFormat
- uva 1428 - Ping pong
- python 变量作用域
- 网络第三课(2)--解包(dns域名解析)
- 我的词库表——OJT培训
- Android SDK无法更新问题解决
- 引入jquery后不执行jquery代码的教训
- Linux通过JNI加载动态so链接出现java.lang.UnsatisfiedLinkError异常解决
- Oracle中的case when的使用