使用g++对c++进行编译链接

news/2024/7/6 21:31:54/文章来源:https://www.cnblogs.com/cppisshit/p/18281627

静态库

  1. 静态库的生成
    静态库实际就是多个.o的归档(文件夹)
  //在bash终端执行依次执行以下g++命令.g++  -c src1.cpp src2.cppar crv libmy.a src1.o src2.o

查看静态库内容:

  //输出src1.0,src2.0,这也验证了静态库.a文件实际就是个归档目录ar -t libmy.a
  1. 静态库链接
g++ -I./mylibdir -L./mylibdir -lmy -o out1//-lmy优先匹配mylibdir目录下的动态库libmy.so
//如果mylibdir目录下的动态库libmy.so和静态库libmy.a都存在
//则应该通过-l:libmy.a进行精确指定
g++ -I./mylibdir -L./mylibdir -l:libmy.a -o out1

动态库

//-shared -fPIC生成与位置无关的动态库
g++ -shared -fPIC src1.cpp src2.cpp -o libmy.so//等价下面两步:
//有别于静态库,这里必须指定-fPIC,以生成位置无关的代码(.o)
g++  -c -fPIC src1.cpp src2.cpp
//-shared:位置无关的.o整合成一个动态库文件
g++ -shared srcfile1.o srcfile2.o -o libmy.so

2.动态库链接:

g++ -I./mylibdir -L./mylibdir -lmy -o out2
  1. ldd查看可执行文件(运行时)依赖哪些动态库?
//out2可以看到依赖动态库libmy.so
ldd out2
//out1使用的是静态库libmy.a。不依赖动态库
ldd out1
  1. 可执行文件运行时找不到相应动态库?
//执行out2,报“找不到libmy.so或libmy.so未定义”
./out2 

原因:
g++ -I./mylibdir -L./mylibdir -lmy -o out2中是编译时链接,对动态库而言这只是确保了可执行文件能编译通过。
还需指定动态库的运行时路径:

1, 编译代码中指定的动态库搜索路径(-rpath)
2, 环境变量LD_LIBRARY_PATH中指定的搜索路径。
3, 配置文件/etc/ld.so.conf中指定的搜索路径。
4, 默认的搜索路径/lib, /usr/lib/g++ main.o libtest.so -Wl, -rpath=/path/to/libs/另外也可以设置LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/libs/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738107.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于全数字实时仿真的嵌入式DevOps解决方案

​为丰富浙江省信息技术应用创新(以下简称“信创”)产业生态,在全社会各领域形成示范效应,浙江省经信厅联合省密码管理局开展2023年浙江省深化信创典型案例评选工作。经过征集申报、专家评选、名单公示等程序,确定36个应用示范案例和24个典型解决方案。【典型解决方案】 基…

巴图自动化PN转Modbus RTU协议转换网关模块快速配置

巴图自动化推出Profinet转Modbus网关模块BT-MDPN10,实现Modbus和Profinet设备互联互通。配置简便,提高系统智能化和生产效率。工业领域中常用的通讯协议有:Profinet协议,Modbus协议,ModbusTCP协议,Profibus协议,Profibus DP协议,EtherCAT协议,EtherNET协议,CAN,CanO…

springboot+vue前后端分离项目-项目搭建7-服务器上安装部署

1.下载VMware(个人使用版),官网下载,需要先用邮箱注册,下载地址:https://support.broadcom.com/group/ecx/productdownloads?subfamily=VMware%20Workstation%20Pro 2.下载镜像dvd类型的,华为云官网下载,需要先注册,下载地址:https://mirrors.huaweicloud.com/mirro…

linux进程被杀掉日志,Linux进程突然被杀掉(OOM killer),查看系统日志

Linux进程被杀掉(OOM killer),查看系统日志 基本概念: Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。内核检测到系统内存不足、挑选并杀掉某个进程的过程可以参…

Salesforce开发入门指南:零基础学习宝典!

开发人员将Salesforce组织扩展到声明式配置之外,构建应用程序,进而优化业务运营。Salesforce开发人员通常会使用两种编程语言:Apex和JavaScript。 然而,Salesforce开发不仅仅只包括代码。为了在职业道路上脱颖而出,开发人员还需要了解声明性功能,将组织的设计和性能保持最…

Apache SeaTunnel社区首位学生Committer诞生!

采访对象 | 陈炳烨 采访人&编辑 | Debra Chen Apache SeaTunnel社区第一位学生Committer就此诞生!这位来自西安交通大学软件工程专业的同学从较为简单的文档修改工作,逐步深入到代码层面,到最后独立负责开发模块,为Apache SeaTunnel项目的发展添砖加瓦的同时,他本人也…

VMware vSphere Tanzu部署_13_创建TKC集群

1.登录tanzu集群登录语法为:kubectl vsphere login --server= --vsphere-username --insecure-skip-tls-verify$ kubectl vsphere login --server=192.168.203.194 --vsphere-username administrator@vsphere.local --insecure-skip-tls-verify登录示例jianhua@napp:~$ kubec…

“东数西算”长三角(苏州)算力调度中心正式启用!

近日,“东数西算”长三角(苏州)算力调度中心启用暨智算点亮仪式在苏州吴江区举办,在智算产业园举行了算力调度中心启用、智算点亮和智算合作签约。近日,“东数西算”长三角(苏州)算力调度中心启用暨智算点亮仪式在苏州吴江区举办,在智算产业园举行了算力调度中心启用、…

2024 MWC上海,“翼”彩纷呈!

2024年6月26日,2024世界移动通信大会上海(简称“MWC上海”)盛大开幕。围绕“未来先行”主题,来自全球的产业、技术和社区等各界代表齐聚一堂,共话产业高质量发展。 在“智启云领 向新未来”主题馆内,天翼云展出了“息壤”“云骁”“慧聚”三大智算平台和“天翼AI云电脑”…

Ubuntu20.04中 ORBSLAM3的安装和测试

ORBSLAM3 安装以及测试教程(Ubuntu20.04) 1.前期准备工作 1.1安装相关依赖sudo apt install git cmake gcc g++ mlocate1.2下载ORBSLAM3源码 可以直接通过github下载源码: (https://github.com/UZ-SLAMLab/ORB_SLAM3) 2.安装一些所需的库 2.1 安装Eigen3库 直接通过命令安装 su…

vue3 父组件【属性】传值给子组件【props】接收

父组件文件:parentcomponent.vue 子组件文件:childcomponent.vue传普通值 传动态值 传对象 传数组<!-- 父组件 --> <template><h1>I am ParentComponent</h1><ChildComponent msg="nice"/></template> <script setup>im…

K8S学习教程(二):在 PetaExpress KubeSphere容器平台部署高可用 Redis 集群

前言 Redis 是在开发过程中经常用到的缓存中间件,为了考虑在生产环境中稳定性和高可用,Redis通常采用集群模式的部署方式。 在制定Redis集群的部署策略时,常规部署在虚拟机上的方式配置繁琐并且需要手动重启节点,相较之下,使用 PetaExpress 提供的 Kubernetes(k8s) 服务 进…

火山引擎数据飞轮实践:在电商场景中,如何建设全链路数据血缘?

数据作为新型生产要素,正支撑企业的数智化转型。但企业数字化建设也存在管理成本高、数据产品使用门槛高、数据资产价值不够的问题,其原因在于业务和数据之间没有形成双向良性驱动。DataLeap可以帮助企业实现数据驱动,通过具体业务中的数据消费数据,实现决策科学、行动敏捷…

IIS发布modules错误和403.14

1、解决IIS启动后报<modules>错误的方案C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/modules参考:https://blog.csdn.net/sinat_39826352/article/details/784434322、IIS部署问题之403.14 这是因为一般情况下,IIS接受到请求后,如果…

教你5分钟完成OnlyFans注册,轻松绑卡完成订阅

OnlyFans是一个内容服务平台,内容创作者可以通过这个平台发布视频、照片、甚至直播,并设定付费墙,粉丝需支付一定费用才能解锁内容。BinGoCard可以完美解决包括OnlyFans在内的海外平台订阅问题。什么是OnlyFans? OnlyFans是一个内容服务平台,内容创作者可以通过这个平台发…

669分,武汉市第四十九中传来喜讯,璞公英「教师增值评价系统」助力学业提升!

星光熠熠,梦想启航 武汉第四十九中学传来喜讯! 高三(5)班物理类考生潘俊安同学 以总分669分的优异成绩脱颖而出! 潘俊安同学不仅实现了自我超越, 更为学校的高考历史增添了浓墨重彩的一笔。 三年磨一剑,今朝试锋芒 学霸秘诀就是它! 学霸风采:潘俊安 潘俊安:高考总分6…

(面向土木工程研究生)abaqus结构分析(免费)视频教学

土木工程专业的研究生,很多都需要做数值分析,而数值分析的平台很多人都是选择abaqus。然而,很多研究生却是从未使用过abaqus的,即,对于abaqus,他们是真正的新手,常常会“不知从何下手”!就我所知,他们可能还会遇到的另外一个困难就是“他们的导师可能完全不懂数值分析…

CentOS7修复OpenSSH漏洞升级到OpenSSH 9.8 RPM一键更新包

OpenSSH是SSH(Secure Shell)协议的开源实现,它支持在两个主机之间提供安全的加密通信,广泛用于Linux等系统,通常用于安全远程登录、远程文件传输和其它网络服务。 2024年7月1日,OpenSSH Server中存在的一个远程代码执行漏洞(CVE-2024-6387,又被称为regreSSHion)细节被…

stoi字符串转十进制数越界问题

原因 在项目开发过程中需要将字符串转化成十进制数,起初没有问题。但是在之后的开发过程中程序在运行时突然发生崩溃,由于没有做异常处理,报错信息也不明显。最后发现是因为某个字符串转化的字符串转化的十进制数超过了int的范围。 c++中各数据类型取值范围解决方法 改用sto…

C#-听说有人不推荐使用Linq!?

先说结论 linq和直接遍历的性能差异点主要还是迭代方式,数组和字符串这类的foreach都是专门有优化的,而linq都是通用的泛型调用迭代器,如果刚好遇到这类数据又需要高性能就尽量不用linq,其他类型或性能要求不高的还是linq香。(ps:linq写的不好不能怪linq) 背景 起初是看到有…