OS X(MACOS) C/C++ 程序链接静态库限制。

在OSX上面C/C++程序不被允许完全静态链接,当然无论是 Windows 还是 Linux 上面也没有办法真正做到完全的静态链接。

OSX上面C/C++程序静态链接也有一些麻烦跟坑点,我们都知道在OSX上面是使用 brew 工具链来安装程序跟依赖的,它会自动下载目标程序代码跟依赖库代码,在OSX本地编译之后在部署到系统环境之中。

这就导致一个问题,比如我们要静态链接 jemalloc,已经在 Makefile 或者 CMakeFiles 工程内指定了使用 jemalloc 那么就一定会链接到 libjemalloc.dylib

有人可能就会说,那么改成链接 libjemalloc.a 就好了?我只能说你想太多,也太天真了,不行的,即便我们写成链接  libjemalloc.a,它还是会链接成 libjemalloc.dylib,神奇把,它就是不会给你链接静态库。

这个时候你就需要看看 Apple 发布的这篇关于静态编译链接的FAQ文章了:

Technical Q&A QA1118: Statically linked binaries on Mac OS X (apple.com)

又有人说,如果我自己手动去编译 jemalloc,出来了静态库、动态库,我指定自己编译出来的目录行不行呢?

答案是不行,即便你把你自己编译出来的dylib动态库全删了,就留下静态库a文件也是会连接到系统编译的libjemalloc.dylib的,这根本不是你删不删文件的问题。

如果你想要解决就只有两个办法能够让我们连接上指定的静态库。

1、把安装到系统的库直接全部卸载删除干净

2、写静态库的绝对路径,不要用任何相对路径,否则写 XX.a 都是链接到对应动态库,除非OSX系统中没有安装这个库的情况下。

我本人推荐用第二方法,写静态库的绝对路径,记住是绝对路径不是相对路径,就是要从根目录 "/" 开始到这个A静态库文件的完整路径。

这个时候在编译就连接上了,用 otool -L 你的程序,就可以看到是不是完全静态编译进去了,如果是静态编译进去的。

你会看不到有什么输出,没有的都会输出,有一种@开头就是相对路径加载dylib(动态库),还有一种是绝对路径就是/xx/xxxx/xxx/???.dylib这种。

苹果是推荐开发人员用动态库dylib,而不是静态库链接的,它也是这么推崇实行的,所以,system.b、crt.0 这两个库,我们都链接不上(但是系统都自带,所以不能静态连接也可以),它就是逼大家尽量用动态库,点都不自由,但是用动态库很麻烦一点就是说,程序不好复制分发。

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

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

相关文章

分布式系统架构介绍

1、为什么需要分布式架构? 增大系统容量:单台系统的性能瓶颈,多台机器才能应对大规模的应用场景,所以就需要我们的应用支撑平台具备分布式架构。 加强系统的可用:为了满足业务的SLA要求,需要通过分布式架构…

表单标记(html)

前言 发现input的type属性还是有挺多的,这里把一些常用的总结一下。 HTML 输入类型 (w3school.com.cn)https://www.w3school.com.cn/html/html_form_input_types.asp text-文本 文本输入,如果文字太长,超出的部分就不会显示。 定义供文本输入的单行…

Stability AI一种新型随心所欲生成不同音调、口音、语气的文本到语音(TTS)音频模型

该模型无需提前录制人声样本作为参考,仅凭文字描述就能生成所需的声音特征。用户只需描述他们想要的声音特点,例如“一个语速较快、带有英国口音的女声”,模型即可相应地生成符合要求的语音。它不仅能模仿已有的声音,还能根据用户…

(已解决)在vue路由配置中,export const constantRoutes和const routes有什么区别,

在 Vue Router 的配置中,export const constantRoutes 和 const routes 主要是关于变量的作用域和导出方式的不同。 const routes: 只是声明了一个常量 routes,其中可能包含了应用中的路由配置数组。这个常量的作用范围仅限于当前文件,如果不…

Mac使用AccessClient打开Linux堡垒机跳转闪退问题解决

登录公司的服务器需要使用到堡垒机,但是mac使用AccessClient登录会出现问题 最基础的AccessClient配置 AccessClient启动需要设置目录权限,可以直接设置为 权限 777 chmod 777 /Applications/AccessClient.app注: 如果不是这个路径,可以打开终端,将访达中…

OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)

目录 ​编辑 1.题目描述 2.C语言中的内置排序函数(qsort) 3.解题思路 3.1 升序 3.2双指针的移动 3.3 保证加入元素的唯一性 4.leetcode上的完整代码 完结散花 悟已往之不谏,知来者犹可追 …

PostgreSQL 与 MySQL 相比,优势何在?

我们将通过一张对比表格详细列出 PostgreSQL 与 MySQL 在不同方面的对比: 对比表格 特性/数据库PostgreSQLMySQL数据类型支持支持JSON/JSONB、数组、区间等高级数据类型基本数据类型支持,JSON支持较普通遵循SQL标准更严格遵循,支持复杂查询…

新增C++max函数的使用

在 C 中&#xff0c;max函数是标准库中的一个函数&#xff0c;用于返回两个或多个元素中的最大值。max函数的声明如下&#xff1a; cpp #include <algorithm>template<class T> const T& max(const T& a, const T& b);这个函数接受两个同类型的参数a…

UML 2.5图形库

UML 2.5图形库 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址drawon.cn或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能&#xff0c;并实现了云端存储&#…

UnityShader:直接光照效果/点光/平行光阴影

效果&#xff1a; 代码&#xff1a; Shader "MyShader/PhongNormal" {Properties{_DiffuseTex("漫反射贴图",2d)"white"{}_AOTex("AO贴图",2d)"white"{}_SpecularMask("高光遮罩",2d)"white"{}_Normal…

Java多线程是什么?七大线程状态总结

前言 大家好&#xff0c;我是chowley&#xff0c;马上大年三十了&#xff0c;提前祝大家新春快乐&#xff0c;这篇来总结一下Java多线程方面内容。 在Java编程中&#xff0c;多线程是一种重要的特性&#xff0c;它允许程序同时执行多个任务&#xff0c;从而提高程序的性能和效…

大模型实战营第二期——2. 浦语大模型趣味Demo

文章目录 1. 大模型及InternLM模型介绍2. InternLM-Chat-7B智能对话Demo2.1 基本说明2.2 实际操作2.2.1 创建开发机2.2.2 conda环境配置2.2.3 模型下载2.2.4 InternLM代码库下载和修改2.2.5 cli运行2.2.6 web_demo运行 3. Lagent智能体工具调用Demo3.1 基本说明3.2 实际操作3.2…

商业智能(BI)数据分析、挖掘概念

商业智能&#xff08;BI&#xff09;数据分析挖掘概念 一、商业智能&#xff08;BI&#xff09;数据分析挖掘概念 数据挖掘目前在各类企业和机构中蓬勃发展。因此我们制作了一份此领域常见术语总结。 1.分析型客户关系管理&#xff08;Analytical CRM/aCRM 用于支持决策&…

nodeJS 的 npm 设置国内高速镜像之淘宝镜像的方法

1、我们知道 nodeJS 是老外搞出来的&#xff0c;服务器放在了国外&#xff0c;国内的小朋友访问起来会比较慢&#xff0c;阿里巴巴的淘宝给出了有力支持&#xff0c;现在我们就将 nodeJS 的镜像地址切换为国内的淘宝镜像。 2、查看当前的镜像地址&#xff1a; npm get registr…

【大厂AI课学习笔记】1.5 AI技术领域(4)CV的六大场景

计算机视觉&#xff0c;是研究如何让计算机象人类一样看的科学。 Computer Vision&#xff0c;我们也称为CV。 它一共有六大场景。 分别是&#xff1a; 图像分类、图像重建、目标检测、图像搜索、图像分割、目标动向监测。 计算机视觉六大场景详解 一、图像分类&#xff…

mysql 数据库基础知识

一、什么是主从复制? 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数据库一般是准实时的业务数据库 简单来说&#xff0c;是使用两个或两个以上相同的数据库&#xff0c;将一个数据库当做主数据库&#xff0c;而…

数据库管理-第147期 最强Oracle监控EMCC深入使用-04(20240207)

数据库管理147期 2024-02-07 数据库管理-第147期 最强Oracle监控EMCC深入使用-04&#xff08;20240207&#xff09;1 发现Exadata2 Exadata监控计算节点&#xff1a;存储节点RoCE交换机管理交换机PDU 总结 数据库管理-第147期 最强Oracle监控EMCC深入使用-04&#xff08;202402…

mybatis动态循环拼接SQL,动态拼接字段 和动态拼接 LEFT JOIN

mybatis动态循环拼接SQL&#xff0c;动态拼接字段 和动态拼接 LEFT JOIN select T.BUSINESS_KEY_ "businessKey",D.JHBM "jhbm",D.JHBM || DO.DOC_NAME AS "designDoc",T.PROC_INST_ID_ "lcId",TO_CHAR( T.END_TIME_, yyyy-MM-dd hh24…

P8597 [蓝桥杯 2013 省 B] 翻硬币--2024蓝桥杯冲刺省一

点击跳转例题 我们读完题发现就是简单的模拟&#xff0c;如果不一样&#xff0c;我们就操作一次就行了。 #include <bits/stdc.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl \n #define LL __int128using namespace std;const…

JavaScript 入门 完整版

目录 第一个知识点&#xff1a;引入js文件 内部引用: 外部引用: 第二个知识点&#xff1a;javascript的基本语法 定义变量&#xff1a; 条件控制(if - else if - else) 第三个知识点&#xff1a;javascript里的数据类型、运算符&#xff1a; 数字类型 字符串类型 布尔…