当前位置: 首页 > news >正文

Linux下将C++程序打包成动态库静态库方法

  之前在这篇文章里介绍过动态库和静态库的理论部分,这篇文章主要介绍下实际的操作步骤:

静态链接库生成

gcc -c main.cpp -o main.o
ar -rc libmain.a main.o
sudo cp libmain.a /usr/local/lib
调用即可

  解释一下上面的命令:前两步生成了libmain.a
sudo cp libmain.a /usr/local/lib 这一步是防止出现报错 /usr/bin/ld:cannot find -l,或者使用软链接
  调用的话我使用cmake形式,在CMakelists.txt中写target_link_libraries(${PROJECT_NAME} libmain.a mosquitto)
注意:如果静态库调用了其他库(本例是mosquitto)一定要放在左边,否则报错undefine,可能是从右往左读

动态链接库生成

gcc -c main.cpp -o main.o
gcc -shared main.o -o libmain.so
调用即可

  解释一下上面的命令:前两步生成libmain.so,sudo cp libmain.so /usr/local/lib 这一步是防止出现报错 /usr/bin/ld:cannot find -l,或者使用软链接
  调用的话我使用cmake形式,在CMakelists.txt中写target_link_libraries(${PROJECT_NAME} libmain.so mosquitto)
注意:如果静态库调用了其他库(本例是mosquitto)一定要放在左边,否则报错undefine,可能是从右往左读

注明一下过程中可能有的报错:

报错1:

/usr/bin/ld:cannot find -l

解决办法:执行上面的cp命令,或者使用软链接,让/usr/local/lib下能够找到该库

报错2:

cp: cannot stat '/usr/local/bin/node': Too many levels of symbolic links

解决办法:这个是因为有了软链接又想cp过去,删除软链接后cp即可

报错3:

/usr/bin/ld: skipping incompatible

解决办法:这个是环境不兼容,用了x86的结构下生成的包在arm下使用,再重新生成一个本地包即可

http://www.lryc.cn/news/26309.html

相关文章:

  • Centos7 服务器基线检查处理汇总
  • PaddleOCR遇到 lanms-neo问题处理
  • coreldraw2023安装包下载及新功能介绍
  • Nginx 负载均衡服务失败场景
  • 开学季哪个电容笔好?2023口碑最好电容笔推荐
  • 经验分享-如何使用http调用chatGPT-3.5-turbo模型API
  • 【C#】yyyy-MM-dd HH:mm:ss 时间格式 时间戳 全面解读超详细
  • 基于神经网络的滑模鲁棒控制
  • 2023年融资融券研究报告
  • Nodejs环境配置 | Linux安装nvm | windows安装nvm
  • 显示接口测试
  • Tcl_Init error: Can‘t find a usable init.tcl in the following directories
  • 进程控制(详解)
  • 瓜子大王稳住基本盘,洽洽食品做对了什么?
  • 【音视频安卓开发 (十一)】jni基础
  • 通过FRP搭建内网穿透,实现域名访问局域网本机
  • Pytorch 代码复现终极指南【收藏】
  • iOS 后台运行
  • 软设下午题第一大题--数据流图(做题)
  • springboot内嵌Tomcat 安全漏洞修复
  • Android OTA 相关工具(三) A/B 系统之 bootctl 工具
  • 【Flink】org.apache.flink.table.api.ValidationException: SQL validation failed
  • 宏基因组鉴定病毒流程中需要的生物信息工具
  • Doris入门篇-分区分桶实验
  • Spring-Xml配置
  • 设计模式-工作线程 创建多少线程池合适
  • 【算法基础】深度优先搜索(DFS) 广度优先搜索(BFS)
  • 【分布式】ProtocolBuffer平滑升级原则
  • 第四阶段17-关于Redis中的list类型,缓存预热,关于Mybatis中的`#{}`和`${}`这2种格式的占位符
  • stringstream用法