Qt .pro配置gcc相关命令(三):-W1、-L、-rpath和-rpath-link

目录

1.Linux 动态库相关知识

1.1.动态库查找路径

1.2.查看程序依赖的动态库

1.3.修改动态库查找路径的方法

1.4.动态链接器缓存管理

2.-Wl参数

3.-L选项(编译时路径)

4.-rpath参数(运行时路径)

5.-rpath-link 参数

6.常见问题与解决方案

7.总结


        在 Linux 系统中编译和链接动态库时,-L-rpath-rpath-link是三个非常重要的参数,它们分别解决了动态库编译、链接和运行时的不同问题。

1.Linux 动态库相关知识

1.1.动态库查找路径

        一个典型的 C/C++ 程序的构建流程是:预处理,汇编,编译,链接。而执行链接的程序其实是 ld,通常编译器比如 GCC 都会自动调用 ld 去进行链接,用户不必关注其中的细节。而 ld 查找动态库的顺序是:    

  1.程序本身指定的路径, 即是rpath或 runpath指定的目录;

  • RPATH:硬编码在 ELF 文件中,优先级最高。
  • RUNPATH:与 RPATH 类似,但优先级低于 LD_LIBRARY_PATH

     2.环境变量 LD_LIBRARY_PATH 指定的目录;

  • 用户自定义的临时路径,多个路径用冒号 : 分隔。
  • 例如:export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH

     3.runpath 指定的目录;

  4./etc/ld.so.cache缓存文件,通常包含 /etc/ld.so.conf 文件编译出的二进制(比如 CentOS 上,该文件会使用 include 从而使用 ld.so.conf.d 目录下面所有的 *.conf 文件,这些都会缓存在 ld.so.cache 中)

  • 这些文件中指定的路径会被动态链接器缓存(通过 ldconfig 命令更新)。

     5.系统默认路径,比如 /lib/usr/lib

  • /lib:系统核心库(如 libc.so)。
  • /usr/lib:用户级库。
  • /usr/local/lib:本地安装的库(如自行编译的软件)。

在编译时若使用 -z nodefaultlib 选项编译,则会跳过 4 和 5。至于 runpath,和 rpath 类似,都是二进制(ELF)文件的动态 section 属性(分别为 DT_RUNPATH 和 DT_RPATH),唯一区别就是是否优先于 LD_LIBRARY_PATH 来查找。

rpath vs. runpathrpath 和 runpath 是嵌入在可执行文件或共享库中的路径列表,用于指定运行时查找共享库的位置。rpath 是旧标准,runpath 是新标准,功能类似但优先级不同。

1.2.查看程序依赖的动态库

1.ldd 命令

ldd /path/to/program  # 显示程序依赖的所有动态库及其路径
  • 若某库显示为 not found,表示系统未找到该库。

2.readelf 命令

readelf -d /path/to/program | grep -E '(RPATH|RUNPATH|NEEDED)'

输出示例:

0x000000000000000f (RPATH)              Library rpath: [/path/to/lib]
0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]

1.3.修改动态库查找路径的方法

1.临时修改:通过 LD_LIBRARY_PATH 环境变量

export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH  # 当前终端生效
# 或添加到 ~/.bashrc 中使其永久生效
echo 'export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

2.永久修改:编辑 /etc/ld.so.conf 或添加新配置

# 方法1:直接编辑主配置文件
sudo vim /etc/ld.so.conf
# 添加一行:/path/to/lib
# 保存后更新缓存
sudo ldconfig# 方法2:在 /etc/ld.so.conf.d/ 目录下创建新配置文件
sudo touch /etc/ld.so.conf.d/myapp.conf
sudo echo '/path/to/lib' > /etc/ld.so.conf.d/myapp.conf
sudo ldconfig  # 更新缓存

3.编译时指定:通过 -Wl,-rpath 选项

在编译程序时,使用 -Wl,-rpath 将路径硬编码到程序中:

gcc -o myapp myapp.c -L/path/to/lib -lmylib -Wl,-rpath,/path/to/lib
  • 优点:无需修改系统配置或环境变量。
  • 缺点:路径被固定,若库位置改变需重新编译。

1.4.动态链接器缓存管理

1.更新缓存

当添加新库或修改 /etc/ld.so.conf 后,需执行:

sudo ldconfig  # 重建动态链接器缓存

2.查看缓存内容

ldconfig -p  # 显示当前缓存的所有库及其路径

2.-Wl参数

        在 Linux 系统中,-Wl 是 GCC 编译器的一个重要参数,用于向链接器(如 ld)传递额外选项。由于 GCC 是编译和链接的前端工具,真正处理链接过程的是链接器,因此需要通过 -Wl 将参数传递给链接器。

        基本语法

gcc [编译选项] -Wl,链接器选项1[,链接器选项2,...] [源文件]

将逗号分隔的选项传递给链接器。如:

gcc -Wl,aaa,bbb,ccc

最终变成了linker的用法:

ld aaa bbb ccc

如果是想把ld -rpath通过-Wl传递给gcc,可以是-Wl,-rpath,xxx,也可以指定-Wl的重复实例:

gcc -Wl,aaa -Wl,bbb -Wl,ccc

类似的参数还有:

  -Wa,<options>   Pass comma-separated <options> on to the assembler-Wp,<options>   Pass comma-separated <options> on to the preprocessor-Wl,<options>   Pass comma-separated <options> on to the linker 

3.-L选项(编译时路径)

  • 编译时:指定链接器搜索库文件的路径。
  • 仅影响链接过程,不影响程序运行时的库查找。

假设你有一个自定义库 libmath.so 位于 /opt/mylibs 目录下:

g++ main.cpp -L/opt/mylibs -lmath -o myapp
  • -L/opt/mylibs:告诉链接器在 /opt/mylibs 目录下搜索 libmath.so
  • -lmath:链接名为 libmath.so 的库。

-L一般用于链接非标准位置的第三方库(如 /usr/local/lib 以外的路径)。

4.-rpath参数(运行时路径)

        运行时搜索路径,将动态库搜索路径硬编码到可执行文件中(运行时生效)。通过修改可执行文件的 .dynamic 段,将路径硬编码到二进制文件中。

        -rpath 的作用相当于在程序运行时设置了 LD_LIBRARY_PATH 环境变量,因为 -rpath指定的路径会被记录在生成的可执行程序中,用于运行时查找需要加载的动态库 。因此,在开发板中无需设置环境变量即可找到相关的动态库。通常情况下,推荐使用 -Wl,-rpath 选项。

# 单个路径
-L/mylib -lmylib -Wl,-rpath=dir# 多个路径
-L/mylib -lmylib -Wl,-rpath,dir1:dir2:...:dirN

        示例:

g++ main.cpp -L/opt/mylibs -lmath -Wl,-rpath=/opt/mylibs -o myapp
  • -Wl,-rpath=/opt/mylibs:将 /opt/mylibs 添加到程序运行时的库搜索路径。

等价写法

# 直接使用链接器参数
g++ main.cpp -L/opt/mylibs -lmath -Wl,-rpath=/opt/mylibs -o myapp# 或使用环境变量
export LDFLAGS="-Wl,-rpath=/opt/mylibs"
g++ main.cpp -L/opt/mylibs -lmath $LDFLAGS -o myapp

特殊变量

$ORIGIN:表示可执行文件所在目录,常用于相对路径。

# 搜索与可执行文件同级的 lib 目录
-Wl,-rpath='$ORIGIN/../lib'

注意:在 Makefile 或 shell 脚本中使用时,需用双引号防止变量提前展开:

-Wl,-rpath="\$$ORIGIN/../lib"

在cmake中使用:

# 设置第三方库路径
set(3RDPARTY_DIR "${PARENT_DIR}/third_party")# 设置目标属性,将运行时库搜索路径添加到目标
set_target_properties(dla_detectPROPERTIESLINK_FLAGS"-L${3RDPARTY_DIR}/zlib/lib -Wl,-rpath,'$ORIGIN/../../third_party/zlib/lib' \-L${3RDPARTY_DIR}/szlib/lib -Wl,-rpath,'$ORIGIN/../../third_party/szlib/lib' \-L${3RDPARTY_DIR}/hdf5/lib -Wl,-rpath,'$ORIGIN/../../third_party/hdf5/lib' \-L${3RDPARTY_DIR}/x264/lib -Wl,-rpath,'$ORIGIN/../../third_party/x264/lib' \-L${3RDPARTY_DIR}/x265/lib -Wl,-rpath,'$ORIGIN/../../third_party/x265/lib' \-L${3RDPARTY_DIR}/ffmpeg/lib -Wl,-rpath,'$ORIGIN/../../third_party/ffmpeg/lib' \-L${3RDPARTY_DIR}/sigmastar/lib -Wl,-rpath,'$ORIGIN}/../../third_party/sigmastar/lib' \-L${3RDPARTY_DIR}/arm_opencv/lib -Wl,-rpath,'$ORIGIN/../../third_party/arm_opencv/lib' \-L${PARENT_DIR}/build -Wl,-rpath,'$ORIGIN/../../build'"
)

或者:

# 设置第三方库路径
set(3RDPARTY_DIR "${PARENT_DIR}/third_party")# 设置rpath
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} \
-L${3RDPARTY_DIR}/zlib/lib -Wl,-rpath,'$ORIGIN/../../third_party/zlib/lib' \
-L${3RDPARTY_DIR}/szlib/lib -Wl,-rpath,'$ORIGIN/../../third_party/szlib/lib' \
-L${3RDPARTY_DIR}/hdf5/lib -Wl,-rpath,'$ORIGIN/../../third_party/hdf5/lib' \
-L${3RDPARTY_DIR}/x264/lib -Wl,-rpath,'$ORIGIN/../../third_party/x264/lib' \
-L${3RDPARTY_DIR}/x265/lib -Wl,-rpath,'$ORIGIN/../../third_party/x265/lib' \
-L${3RDPARTY_DIR}/ffmpeg/lib -Wl,-rpath,'$ORIGIN/../../third_party/ffmpeg/lib' \
-L${3RDPARTY_DIR}/sigmastar/lib -Wl,-rpath,'$ORIGIN/../../third_party/sigmastar/lib' \
-L${3RDPARTY_DIR}/arm_opencv/lib -Wl,-rpath,'$ORIGIN/../../third_party/arm_opencv/lib' \
-L${PARENT_DIR}/build -lsigmastar_vVehicle_det -Wl,-rpath,'$ORIGIN/../../build'")

5.-rpath-link 参数

        用于指定动态库的搜索路径(在链接阶段),该选项只在链接阶段起作用,不会被写入elf文件中。辅助链接器解析库之间的依赖关系,但不影响程序运行时的库搜索路径。适用于复杂的库依赖链(如 A 依赖 B,B 依赖 C)。

        示例:假设:

  • libapp.so 依赖 libmath.so
  • libmath.so 依赖 libutils.so(位于 /opt/thirdparty)。
# 链接 libapp.so 时指定 libmath.so 的依赖路径
g++ -shared -fPIC app.cpp -L/opt/mylibs -lmath -Wl,-rpath-link=/opt/thirdparty -o libapp.so
  • -Wl,-rpath-link=/opt/thirdparty:告诉链接器,libmath.so 依赖的 libutils.so 在 /opt/thirdparty 目录下。
  • 但程序运行时,仍需通过 -rpath 或环境变量指定 /opt/thirdparty

在cmake中使用:

# 设置第三方库路径
set(3RDPARTY_DIR "${PARENT_DIR}/third_party")# 设置目标属性,将运行时库搜索路径添加到目标
set_target_properties(dla_detectPROPERTIESLINK_FLAGS"-L${3RDPARTY_DIR}/zlib/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/zlib/lib' \-L${3RDPARTY_DIR}/szlib/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/szlib/lib' \-L${3RDPARTY_DIR}/hdf5/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/hdf5/lib' \-L${3RDPARTY_DIR}/x264/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/x264/lib' \-L${3RDPARTY_DIR}/x265/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/x265/lib' \-L${3RDPARTY_DIR}/ffmpeg/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/ffmpeg/lib' \-L${3RDPARTY_DIR}/sigmastar/lib -Wl,-rpath-link,'$ORIGIN}/../../third_party/sigmastar/lib' \-L${3RDPARTY_DIR}/arm_opencv/lib -Wl,-rpath,'$ORIGIN/../../third_party/arm_opencv/lib' \-L${PARENT_DIR}/build -Wl,-rpath-link,'$ORIGIN/../../build'"
)

 或者

# 设置第三方库路径
set(3RDPARTY_DIR "${PARENT_DIR}/third_party")# 设置rpath
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} \
-L${3RDPARTY_DIR}/zlib/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/zlib/lib' \
-L${3RDPARTY_DIR}/szlib/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/szlib/lib' \
-L${3RDPARTY_DIR}/hdf5/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/hdf5/lib' \
-L${3RDPARTY_DIR}/x264/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/x264/lib' \
-L${3RDPARTY_DIR}/x265/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/x265/lib' \
-L${3RDPARTY_DIR}/ffmpeg/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/ffmpeg/lib' \
-L${3RDPARTY_DIR}/sigmastar/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/sigmastar/lib' \
-L${3RDPARTY_DIR}/arm_opencv/lib -Wl,-rpath-link,'$ORIGIN/../../third_party/arm_opencv/lib' \
-L${PARENT_DIR}/build -lsigmastar_vVehicle_det -Wl,-rpath-link,'$ORIGIN/../../build'")

与 -rpath 的区别

  • -rpath:同时影响链接和运行时的库搜索。
  • -rpath-link:仅在链接时生效,不修改可执行文件的运行时路径。

三者对比

参数生效阶段是否影响运行时作用
-L链接时指定链接器搜索库的路径
-rpath运行时修改程序运行时的库搜索路径(硬编码到二进制文件)
-rpath-link链接时辅助链接器解析库依赖关系,但不影响程序运行时的搜索路径

6.常见问题与解决方案

1.错误:libxxx.so: cannot open shared object file: No such file or directory

  • 可能原因
    • 库未安装。
    • 库路径未包含在查找路径中。
  • 解决方案
# 1. 确认库是否存在
find / -name "libxxx.so*" 2>/dev/null# 2. 若存在,将路径添加到 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH# 3. 或添加到系统配置
echo '/path/to/lib' | sudo tee -a /etc/ld.so.conf
sudo ldconfig

2.区分 RPATH 和 RUNPATH

  • RPATH:在 RUNPATH 和 LD_LIBRARY_PATH 之前被搜索。
  • RUNPATH:在 LD_LIBRARY_PATH 之后被搜索。

修改方法

# 编译时指定 RPATH
gcc -Wl,-rpath,/path/to/lib ...# 编译时指定 RUNPATH(需显式使用 -rpath-link)
gcc -Wl,-rpath-link,/path/to/lib -Wl,-rpath,'$ORIGIN/../lib' ...
  • $ORIGIN 表示程序所在目录,用于相对路径。

3.链接时提示找不到库的依赖

/usr/bin/ld: libmath.so: undefined reference to `function_in_libutils'

原因

  • libmath.so 依赖 libutils.so,但链接器找不到 libutils.so

解决方案

# 临时指定依赖路径
g++ -shared -fPIC app.cpp -L/opt/mylibs -lmath -Wl,-rpath-link=/opt/thirdparty -o libapp.so

7.总结

  1. 优先使用 -rpath:减少对环境变量的依赖,提高程序可移植性。
  2. 使用 $ORIGIN:让库路径相对于可执行文件,避免硬编码绝对路径。
  3. 谨慎使用 -rpath-link:仅在链接复杂依赖的库时使用,避免污染运行时路径。
  4. 测试部署:确保程序在目标环境中能正常找到库(如使用 ldd myapp 检查)。

通过合理组合 -L-rpath 和 -rpath-link,可以灵活控制动态库的编译、链接和运行时行为,解决复杂的依赖问题。

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

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

相关文章

Hoppscotch

官方地址 xixiaxiazxiaxix下载 • Hoppscotch Hoppscotch 是一款轻量级、基于 Web 的 API 开发套件&#xff0c;其核心功能和特点如下&#xff1a; 核心功能3 交互式 API 测试&#xff1a;允许用户实时发送请求并查看响应&#xff0c;方便记录 API 行为&#xff0c;在记录响…

RabbitMQ 知识详解(Java版)

RabbitMQ 知识详解&#xff08;Java版&#xff09; RabbitMQ 是一个开源的消息代理&#xff0c;实现了高级消息队列协议&#xff08;AMQP&#xff09;。它用于在分布式系统中实现应用解耦、异步通信和流量削峰。 核心概念 生产者(Producer)&#xff1a;发送消息的应用消费者(…

Flink task、Operator 和 UDF 之间的关系

要真正驾驭 Flink 并构建出高效、稳定、可扩展的流处理应用&#xff0c;仅仅停留在 API 的表面使用是远远不够的。深入理解其内部的运行机制&#xff0c;洞悉数据从代码到分布式执行的完整生命周期&#xff0c;以及明晰各个核心组件之间错综复杂而又协同工作的关系&#xff0c;…

Veeam Backup Replication系统的安装与使用

Veeam Backup & Replication系统安装与使用 系统简介 核心功能 备份与恢复&#xff1a;专注于虚拟化环境&#xff08;如VMware和Hyper-V&#xff09;的备份与恢复&#xff0c;支持物理服务器和云环境。快速恢复&#xff1a;提供即时恢复功能&#xff0c;可在几分钟内恢复…

十四、【ESP32全栈开发指南:搭建轻量级HTTP服务器】

一、HTTP协议基础 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;作为互联网基础协议&#xff0c;采用请求-响应模型工作&#xff1a; 1.1 HTTP请求组成 GET /uri?query1value1 HTTP/1.1 // 请求行&#xff08;方法URI协议版本&#xff09; Host: example…

java中LinkedList和ArrayList的区别和联系?

我们被要求解释Java中LinkedList和ArrayList的区别和联系。下面将分别从实现原理、性能特点、使用场景等方面进行详细说明&#xff0c;并总结它们的相同点和不同点。 # 一、联系&#xff08;共同点&#xff09; 1. 都实现了List接口&#xff0c;因此具有List接口的所有方法&…

明远智睿SD2351核心板:边缘计算时代的工业级核心引擎深度解析

在工业4.0与物联网深度融合的背景下&#xff0c;边缘计算设备正从单一功能模块向高集成度、智能化平台演进。明远智睿推出的SD2351核心板&#xff0c;凭借其异构计算架构、工业级接口资源和全栈技术生态&#xff0c;重新定义了边缘计算设备的性能边界。本文将从技术架构、场景适…

Flask 动态模块注册

目录 1. 项目概述2. 项目结构3. 核心组件解析3.1 动态模块注册系统 (api/__init__.py)3.2 应用程序入口 (setup_demo.py) 4. 模块开发指南4.1 标准模块 (*_app.py)4.2 SDK模块 (sdk/*.py) 5. URL路径规则6. 如何使用6.1 启动应用6.2 添加新模块 7. 工作原理 1. 项目概述 这个项…

JVM 内存、JMM内存与集群机器节点内存的联系

目录 1、JVM 内存 1.1、分配机制 1.2、jvm模型位置 1.3、字节码内存块 2、JMM内存 2.1、JMM模型 2.2、工作流程图 1、工作内存与主内存的交互 2. 多线程下的主内存与堆内存交互 2.3、 主内存与工作内存的同步方案 1、volatile 2、synchronized 3、final 3、内存使…

学习昇腾开发的第一天--环境配置

1、昇腾社区官网&#xff1a;昇腾社区官网-昇腾万里 让智能无所不及 2、产品-->选择开发者套件-->点击制卡工具的下载&#xff1a;资源-Atlas 200I DK A2-昇腾社区 3、如果制卡工具不能使用在线制卡&#xff0c;可以下载镜像到本地使用本地制卡&#xff1a;Linux系统制…

Android WebView 深色模式适配方案总结

Android WebView 深色模式适配方案总结 在 Android WebView 中适配深色模式&#xff08;Dark Mode&#xff09;是一个常见的需求&#xff0c;尤其是当加载的网页没有原生支持 prefers-color-scheme 时。本文将介绍 3 种主流方案&#xff0c;并分析它们的优缺点&#xff0c;帮助…

项目练习:使用mybatis的foreach标签,实现union all的拼接语句

文章目录 一、需求说明二、需求分析三、代码实现四、报表效果 一、需求说明 在sql查询数据后&#xff0c;对数据分组统计。并最后进行总计。 二、需求分析 最终&#xff0c;我想用sql来实现这个统计和查询的功能。 那么&#xff0c;怎么又查询&#xff0c;又统计了&#xf…

7.7 Extracting and saving responses

Chapter 7-Fine-tuning to follow instructions 7.7 Extracting and saving responses 在本节中&#xff0c;我们保存测试集响应以便在下一节中评分&#xff0c;除此之外保存模型的副本以供将来使用。 ​ 首先&#xff0c;让我们简单看看finetuned模型生成的响应 torch.manu…

计算机网络第3章(上):数据链路层全解析——组帧、差错控制与信道效率

目录 一、数据链路层的功能二、组帧2.1 字符计数法&#xff08;Character Count&#xff09;2.2 字符填充法&#xff08;Character Stuffing&#xff09;2.3 零比特填充法2.4 违规编码法 三、差错控制3.1 检错编码&#xff08;奇偶校验码&#xff09;3.2 循环冗余校验&#xff…

铸铁试验平台的重要性及应用前景

铸铁作为一种重要的金属材料&#xff0c;在工业生产中扮演着举足轻重的角色。为了确保铸铁制品的质量和性能&#xff0c;铸铁材料的试验是必不可少的环节。而铸铁试验平台则是进行铸铁试验的关键设备之一&#xff0c;它为铸铁材料的研究和开发提供了重要的技术支持。本文将探讨…

std::shared_ptr引起内存泄漏的例子

目录 一、循环引用&#xff08;最常见场景&#xff09; 示例代码 内存泄漏原因 二、共享指针管理的对象包含自身的 shared_ptr 示例代码 内存泄漏&#xff08;或双重释放&#xff09;原因 三、解决方案 1. 循环引用&#xff1a;使用 std::weak_ptr 2. 对象获取自身的 …

AI 知识数据库搭建方案:从需求分析到落地实施

AI 知识数据库的搭建需结合业务场景、数据特性与技术架构&#xff0c;形成系统化解决方案。以下是一套完整的搭建框架&#xff0c;涵盖规划、设计、实施及优化全流程&#xff1a; 一、前期规划&#xff1a;需求分析与目标定义 1. 明确业务场景与知识需求 场景导向&#xff1a…

Tensorflow 基础知识:变量、常量、占位符、Session 详解

在深度学习领域,TensorFlow 是一个广泛使用的开源机器学习框架。想要熟练使用 TensorFlow 进行模型开发,掌握变量、常量、占位符和 Session 这些基础知识是必不可少的。接下来,我们就深入了解一下它们的概念、用处,并通过代码示例进行演示。 一、常量(Constant) 常量,顾…

linux 常见问题之如何清除大文件的内容

linux 常见问题之如何清除大文件的内容 在 Linux 系统中&#xff0c;我们有时会遇到文件随着时间增长变得巨大&#xff0c;最常见的就是服务器的日志文件&#xff0c;随着时间的推移占用大量的磁盘空间&#xff0c;下面介绍如何清楚大文件的内容&#xff0c;当然避免文件内容过…

薛定谔的猫思想实验如何推演到量子计算

前言 这是我的选修课作业&#xff0c;但是我并不喜欢小论文方式的写法&#xff0c;死板又老套。先在这打一份底稿。 薛定谔的猫 可能一说到量子这个关键词&#xff0c;大家第一时间都会想到的是“薛定谔的猫”。 实验介绍 薛定谔的猫是一个著名的思想实验&#xff0c;由奥…