源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

动态库调用静态库示例讲解

  • 时间:2022-08-16 06:06 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:动态库调用静态库示例讲解
生成动态库: 需要的目标文件得用-fPIC选项生成. 而静态库所需的目标文件可以不用-fPIC选项. 例:
[u]复制代码[/u] 代码如下:
/////// static.h void static_print(); ///////static.cpp #include <iostream> #include "static.h" void static_print() {      std::cout<<"This is static_print function"<<std::endl; } ////// shared.h void shared_print(); ////// shared.cpp #include <iostream> #include "shared.h" #include "static.h" void shared_print() {        std::cout<<"This is shared_print function";         static_print(); } ////////test.cpp    #include "share.h" int main() {        shared_print();        return 0;    }
方法一: 静态库的.o文件也用-fPIC生成. 生成动态库时把静态库加入.  生成应用程序时只加载动态库
[u]复制代码[/u] 代码如下:
 g++ -c -fPIC static.cpp // 生成static.o  ar -r libstatic.a static.o // 生成静态库libstatic.a  g++ -c -fPIC shared.cpp // 生成shared.o  g++ -shared shared.o -lstatic -o libshared.so   // 生成动态库libshared.so 注: -shared是g++的选项,与shared.o无关. -lstatic选项把libstatic.a的函数加入动态库中.  g++ test.cpp -lshared -o test.exe // link libshared.so 到test.exe中.  
方法二:  静态库的.o文件不用-fPIC生成. 生成动态库时不加表态库. 生成应用程序时加载动态库和静态库.
[u]复制代码[/u] 代码如下:
 g++ -c static.cpp // 生成static.o  ar -r libstatic.a static.o // 生成静态库libstatic.a  g++ -c -fPIC shared.cpp // 生成shared.o  g++ -shared shared.o -o libshared.so // 生成动态库libshared.so 注: -shared是g++的选项,与shared.o无关. 这时如果加-lstatic. error:relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC  g++ test.cpp -lshared -lstatic -o test.exe // link libshared.so 到test.exe中.  
两种方法的不同之处在于static_print的实际代码一个在.so中.一个在最后test.exe文件中. 个人觉得第一种方法更好, 因为动态库应该看成一个可以独立运行的程序.
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部