rpath在ubuntu18.04的坑

Ubuntu 18.04 Python 3开发环境实战部署指南 Python开发环境是软件工程的基础支撑,其核心在于解释器管理、依赖隔离与系统兼容性三者的协同。在Linux服务器场景中,Ubuntu 18.04作为长期支持(LTS)发行版,虽已停止主流更新,但仍在大量生产环境中承担关键任务;其内置的Python 3.6与APT包管理体系深度耦合,导致直接升级或替换易引发apt崩溃、ssl模块缺失、pip失效等连锁故障。因此,构建稳定环境需摒弃‘覆盖式安装’思维,转而采用分层隔离策略:以apt保障系统底层稳定,用pyenv实现用户级多版本灵活切换,再通过venv完成项目级 阅读详情

一、起因

  • 在16.04上好好的程序,复制到18.04就报错,找不到库

二、确定问题

  • 16.04使用rpath,17、18.04使用runpath,使用readelf -d <binary_name> | grep 'R.*PATH'可以查看
  • 但是runpath只负责直接依赖关系,如果依赖库a还依赖其他第三方库,而a又没有rpath和runpath(安装时默认没有他们),就会报找不到库

三、解决方法

  • 修改LD_LIBRARY_PATH可以解决,但是会影响其他程序
  • 使用编译选项-Wl,-rpath=无效,在18.04仍是设置runpath
  • 使用编译选项add_compile_options("-Wl,--disable-new-dtags,-rpath=../lib")无效
  • 使用patchelf --set-rpath '$ORIGIN/../lib64' <binary_name>修改a的runpath,a的依赖对了,程序的依赖还是有问题
  • set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,../lib,-disable-new-dtags")成功!

四、总结

  • 关键在于-disable-new-dtags,如果自己使用g++编译是可以成功的
  • 使用cmake就会出现-disable-new-dtags没有加到编译选项里,要使用set(CMAKE_VERBOSE_MAKEFILE ON)查看
  • add_compile_options不知道为什么加不进去,set_target_properties可以

五、番外

  • 在ros2的cmake中可以使用set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib/${PROJECT_NAME}")设置,需要把第三方库安装在目录${CMAKE_INSTALL_PREFIX}/lib/${PROJECT_NAME}。
gcc 编译安全选项 OPT_CFLAGS += -fPIC -fPIE -fstack-protector-all -z now -D_FORTIFY_SOURCE=2 -fvisibility=hidden 操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,例如 ASLR、NX 等等,这里简单介绍一些常见的使用项。 简介 操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,例如 NX ASLR PIE CANARY FORTIFY RELRO 等手段,存在 NX 的话... 阅读详情

相关推荐

VSCode远程开发踩坑记:WSL里Ubuntu 18.04的“404 Not Found”和GLIBC连环坑,我是怎么一步步填上的

本文详细记录了在VSCode远程开发中,WSL下Ubuntu 18.04遇到的GLIBC兼容性问题及解决方案。从404 Not Found错误到GLIBC版本冲突,通过编译安装新版GLIBC、使用patchelf工具重定向依赖等步骤,逐步修复问题,并提供了长期维护老旧系统的实用建议。

weixin_28826961的博客 317

Linux下C++程序二进制跨机器部署

然后将编译安装gcc得到的lib64目录拷贝到ELF程序目录下,一块打包部署就好了。glibc目标文件也拷到lib64目录下打包。

shada的专栏 790

解决VSCode连接WSL中Ubuntu 18.04因GLIBC版本缺失导致的疑难杂症

本文详细解析了VSCode连接WSL中Ubuntu 18.04时,因GLIBC版本过低(如缺失GLIBC_2.28)导致的服务器启动失败问题。文章提供了安全编译安装新版GLIBC 2.28,并使用patchelf工具修补VSCode Server Node二进制文件的完整解决方案,帮助开发者在不升级系统的情况下彻底解决此连接问题。

weixin_28835551的博客 269

Linux下可执行文件指定运行时库(.so文件)路径

rpath 全称是run-time search path,规定了Linux下可执行文件在寻找.so文件时的第一优先位置

崔杰城的博客 2432

单例模式及其线程安全详解

单例模式是一种常用的软件设计模式,它保证一个类在程序运行期间只有一个实例,并提供一个全局访问点。这种模式常用于需要频繁创建和销毁的对象,以及提供全局访问点的场景。优点:在类加载的时候,instance 静态实例就已经创建并初始化好了,所以,instance 实例的创建过程是线程安全的,执行效率高,性能好,没有锁。缺点:因为不支持延迟加载,如果实例占用资源多(比如占用内存多)或初始化耗时长(比如需要加载各种配置文件),提前初始化实例是一种浪费资源的行为。优点:支持延迟加载,节省内存,线程安全。

程序猿老樊的博客 649

Ubuntu 18.04 Qt xcb插件崩溃:缺的是ABI兼容的XCB扩展库

Qt平台插件机制依赖底层X Window系统抽象,其中xcb插件是Linux桌面环境下GUI程序启动的关键组件。其运行原理基于动态符号解析——不仅需加载libqxcb.so,更要求所依赖的libxcb-xinerama、libxcb-cursor等扩展库具备匹配的ABI版本与导出符号。当Ubuntu 18.04系统自带的libxcb系列包版本偏低(如libxcb-xinerama0=1.13-2),而Qt 5.15.2编译时链接了高版本符号(如xcb_xinerama_is_active),就会触发dlop

weixin_29196891的博客 257

解决需要手动设置LD_LIBRARY_PATH

解决需要手动设置LD_LIBRARY_PATH

随手写下笔记和感悟 3092

OpenJDK 11.0.24 Linux x64 libjli.so 加载失败修复指南

Java 运行时依赖库(如 libjli.so)的动态链接失败,本质是 ELF 二进制中 RPATH 或 RUNPATH 缺失或配置错误,导致动态链接器无法定位共享库。该问题在 OpenJDK 11.0.24 Linux x64 版本中集中暴露,尤其影响 CentOS 7、Ubuntu 18.04 等旧 GLIBC 环境。其技术根源在于构建时未嵌入正确的运行时库搜索路径,而非系统缺失基础库或环境变量配置不当。典型应用场景包括 Docker 容器启动失败、CI/CD 流水线中 java -version 报错

weixin_30512965的博客 230

解决GLIBCXX_3.4.29 not found:Linux动态库版本排查与修复指南

在Linux环境下运行预编译程序时,动态库与符号版本不匹配是常见的系统级问题。C++程序依赖libstdc++运行库,其内部通过GLIBCXX符号版本标签管理ABI兼容性。当程序由较新GCC编译、需要高版本符号而系统库版本过旧时,便会触发GLIBCXX_3.4.29 not found错误。理解动态库加载机制、符号版本演化规律和GCC版本对应关系,是高效排查此类故障的基础。在实际运维中,该问题常见于Ubuntu 18.04、CentOS 7等老版本发行版,或通过conda、pip安装的带C++扩展的程序中。

weixin_32705179的博客 270

Ubuntu 18.04离线环境GCC 9.3迁移指南:从打包到排错

在Linux开发中,编译器工具链是构建系统的核心,而GCC作为最常用的编译器,其版本管理直接影响C++17等新标准的支持。离线内网环境下,通过apt安装新版本往往受阻,此时可重定位的编译器打包方案成为高效选择。本文从GCC的目录结构与动态库依赖原理出发,解析PATH、LD_LIBRARY_PATH、LIBRARY_PATH等环境变量的作用,结合Ubuntu 18.04迁移GCC 9.3的实际案例,介绍如何利用zip包离线部署、切换默认版本并解决libstdc++、crt1.o等常见问题。适用于构建机迁移、多

weixin_34198453的博客 435

双模音频解码器设计:USB+蓝牙LDAC平衡输出方案

音频解码器是数字音频系统中实现数模转换的核心组件,其性能直接决定音质保真度与系统延迟。基于高集成SoC的解码方案通过统一时钟域与片内DSP处理,有效抑制Jitter并简化硬件拓扑;结合全平衡模拟输出架构,可显著提升共模抑制比(CMRR)与信噪比(SNR)。该技术路径广泛应用于便携式Hi-Res音频设备、USB-C小尾巴DAC及蓝牙高解析耳机放大器等场景。本文围绕ES9038Q2M双模SoC展开,详解其在LDAC协议支持、UAC2.0兼容性及平衡电流型DAC输出方面的工程实现,为高性能、可量产音频硬件开发提供

weixin_42613018的博客 388

CMake中INSTALL_RPATH与BUILD_RPATH问题

CMake为了方便用户的安装,默认在make install之后会自动remove删除掉相关的RPATH,这个时候你再去查看exe的RPATH,已经发现没有这个字段了。如何让CMake能够在install的过程中写入相关RPATH,并且该RPATH不能使当初build的时候的RPATH呢?设置linker的rpath选项:$ gcc -Wl,-rpath,/your/rpath/ test.cpp。如果需要设置$ORIGIN:$ gcc -Wl,-rpath,‘$ORIGIN/lib’ test.cpp。.

喜欢打篮球的普通人 5471

OS实验xv6 6.S081 开坑

OS实验xv6 6.S081 开坑 终于把xv6 2019 6.S081做完了,网络部分没有写,因为有计网实验了。怎么说呢,xv6的坑有点多,能做完多亏了:和我同学ljj交流,参考RedemptionC老哥的博客(他写的非常详细,遗憾的是,他好像没有写mmap),再者就是参考这位老哥的做法(没有源码,写得不是特别详细,不过有借鉴作用,mmap就是借鉴了他的思想)……废话不多说了,直接开始。 实验指导 首推RedemptionC的博客 这位老哥的个人博客 xv6 6.S081官网(后面的实验都要参考官网

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 4493

Ubuntu 18.04 下 Snap 应用打包与稳定交付实战

Snap 是一种面向 Linux 的通用应用打包与分发技术,其核心在于自包含运行时、强隔离沙盒及声明式契约模型。相比 deb 等传统包格式,Snap 通过 squashfs 镜像封装应用、依赖与指定版本解释器(如 Python 3.8),彻底规避老旧系统(如 Ubuntu 18.04)中 glibc 2.27、内核 4.15、禁止 apt 升级等导致的依赖冲突与环境不一致问题。该技术在工业控制、边缘计算和教育终端等长期服役场景中展现出高确定性部署、零摩擦安装(sudo snap install)、可审计回滚

weixin_30654583的博客 339

嵌入式开发新思路:用QP框架5步搞定状态机设计(附STM32移植指南)

本文介绍了在嵌入式开发中使用QP框架进行状态机设计的新思路。通过对比传统RTOS与事件驱动模型的差异,详细解析了QP框架的核心组件与优势,并提供了基于STM32的5步实战指南,包括环境搭建、状态机实现与性能优化技巧,帮助开发者从顺序阻塞思维转向高效的事件驱动架构。

milk5的博客 900

竞赛无人机模块化开发实战:2023 TI电赛G题空地协同消防系统(飞控与视觉融合篇)

本文以2023年TI电赛G题为例,详细阐述了采用模块化开发思维构建空地协同智能消防系统的实战方法。文章重点拆解了无人机飞控二次开发、视觉识别与融合控制等核心模块,提供了硬件选型、代码实现与系统联调的完整指南,旨在帮助参赛者通过“搭积木”式编程高效完成复杂系统集成。

js777的博客 454

Ubuntu 18.04 动态库与可执行文件路径配置全攻略

在Linux开发与运维中,动态库和可执行文件的搜索路径是程序能否正常运行的关键。动态链接器ld.so依据LD_LIBRARY_PATH、ldconfig缓存等顺序查找.so文件,而shell则通过PATH定位命令;理解这一机制,能高效应对"error while loading shared libraries"和"command not found"等经典报错。围绕Ubuntu 18.04环境,文章系统对比了三种动态库配置方法(ldconfig、LD_LIBRARY_PATH、RPATH/RUNPATH)

weixin_33507732的博客 259

手把手教你用STM32CubeIDE移植Vector CCP驱动,实现与INCA的标定通信(附避坑指南)

本文详细介绍了如何在STM32CubeIDE环境下移植Vector CCP驱动,实现与INCA的标定通信。从开发环境准备、CAN外设配置到CCP协议栈移植和A2L文件生成,提供了完整的操作流程和常见问题解决方案,帮助工程师快速掌握基于CAN总线的标定技术。

weixin_28685287的博客 138

Ubuntu 18.04动态库与PATH配置:从报错到彻底解决

在Linux环境下,动态库加载与可执行文件查找是程序能否正常运行的基础机制。动态链接器通过ld.so.cache、LD_LIBRARY_PATH及内嵌RPATH等路径解析共享库,而Shell则依据PATH环境变量逐目录定位命令。理解这些原理不仅能快速解决“cannot open shared object file”或“command not found”等常见报错,还能科学规划多版本软件部署。本文结合Ubuntu 18.04实际运维场景,系统梳理了临时、用户级、系统级三种动态库配置方案,以及PATH的优先

weixin_34005090的博客 106

Windows版MySQL8.4.2LTS解压直用(下载免安装-绿色-项目打包直接使用-含卸载)

安装前运行微软常用运行库全集(也可能称为依赖)关于MySQL8中相关参数配置,可通过。选择8.5.2LTS长期服务版。选中密码,右键会直接复制。

xzzteach的博客 1440

Proteus仿真——电压比较器

电压比较器是一种对输入信号进行鉴别与比较的电路,是组成非正弦波发生电路的基本单元电路。常用电压比较器有如下几种:单限比较器、滞回比较器、窗口比较器、集成电压比较器等。

weixin_58745307的博客 3375

Ubuntu 18.04 Snap 打包实战:兼容 core18 的严格 confinement 构建指南

Snap 是 Linux 下基于沙盒与声明式权限的现代软件分发机制,其核心原理依托 AppArmor 安全策略、seccomp 系统调用过滤及 squashfs 只读镜像封装。在 Ubuntu 18.04 这类长期支持但生态冻结的系统中,Snap 的技术价值尤为突出——它能彻底解决跨环境依赖冲突、路径硬编码、权限失控等传统打包顽疾,实现‘一次构建、多端部署、零宿主污染’。典型应用场景包括政企边缘设备交付、教育机房统一运维、嵌入式 Python 工具链固化,以及 LPIC-2 等认证体系中的系统工程能力验证。

weixin_30410119的博客 408

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Ubuntu 18.04 部署 Nginx 的系统级实践指南

Nginx 是高性能 Web 服务器与反向代理的核心组件,其运行依赖操作系统底层机制——包括 systemd 服务管理、APT 包依赖链、文件权限模型及 OpenSSL/PCRE 等动态库兼容性。在 Ubuntu 18.04 这一关键 LTS 版本中,官方 nginx 1.14.0 包虽稳定,但默认缺失 HTTP/2、stream 模块及动态模块支持,导致反向代理、HTTPS 和负载均衡等常见场景无法开箱即用。理解其与 systemd 单元定义、AppArmor 策略、netplan 网络配置的耦合关系,是

weixin_33716941的博客 328

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Ubuntu 18.04 Apache SSL 配置深度排障指南

SSL/TLS 是现代 Web 通信的安全基石,其核心在于证书链验证、协议版本协商与加密套件匹配。在 Ubuntu 18.04 这类长期支持但已停止维护的系统中,OpenSSL 1.1.1 与 Apache 2.4.29 的组合存在 TLS 1.3 支持缺失、证书链解析僵化、ACME v2 协议兼容性差等深层限制。这些技术约束导致 iOS/Android WebView 握手失败、Firefox 报错 'error ssl version or'、以及 'no required ssl certificat

447

Ubuntu 18.04 安装 Nginx 实操指南:避坑、验证与安全加固

Nginx 是高性能 Web 服务器与反向代理的核心组件,其安装并非简单执行 apt 命令,而需兼顾系统兼容性、依赖完整性与生产安全基线。在 Ubuntu 18.04 这类长期支持(LTS)系统中,APT 默认提供的 Nginx 1.14.0 版本缺乏 HTTP/2 支持、OpenSSL 1.1.1 深度集成及关键安全配置,易导致 HTTPS 握手失败、扫描告警或模块不兼容等问题。本文从基础概念切入,解析 nginx安装 流程中的五大前置校验(架构匹配、时间同步、配置残留、端口占用、依赖版本),对比 APT

weixin_30764771的博客 350
上一篇: 源码安装cmake
下一篇: openvino多设备使用
刀么克瑟拉莫
博客等级 码龄14年 68粉丝 268原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀么克瑟拉莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值