记CMakeLists.txt中已经配置-fPIC参数但未生效的解决方案

文章目录

        • 1. 问题背景
        • 2. CMake中添加-fPIC的方式
        • 3. 检查-fPIC是否添加成功
        • 4. CMakeLists.txt中已经配置-fPIC参数但未生效的解决方案

1. 问题背景

博主的库会被编译成一个供第三方使用的静态库,第三方在使用博主的库编译动态库时,若不加-fPIC会报unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol stderr@@GLIBC_2.17,因此必须要配置-fPIC参数

2. CMake中添加-fPIC的方式
  • 方法1:在CMakeLists.txt中添加如下代码
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
    
  • 方法2:对特定目标设置参数
    add_library(mylib SHARED mylib.c)
    set_target_properties(mylib PROPERTIES COMPILE_FLAGS "-fPIC")
    
  • 方法3:在CMakeLists.txt中添加add_compile_options(-fPIC)
  • 方法4:在CMakeLists.txt中添加set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  • 方法5:在执行cmake时,添加参数-DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC
3. 检查-fPIC是否添加成功

执行cmake后,检查生成的CMakeCache.txt中是否存在-fPIC字段,若无则说明配置失败。

在这里插入图片描述

4. CMakeLists.txt中已经配置-fPIC参数但未生效的解决方案

博主在CMakeLists.txt中已经做了-fPIC的配置,但发现CMakeCache.txt中并没有-fPIC字段,导致第三方用户在编译动态库的时候报stderr@@GLIBC_2.17

最后的解决方案按第2节中的方法5进行实现,即在执行cmake的时候手动配置参数-DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC,具体原因未知,大概跟cmake的变量作用范围有关,先解决问题再说。


参考链接:

  • https://www.cnblogs.com/hjj801006/p/14360889.html
  • https://www.cnblogs.com/dragoo1/articles/17919321.html
  • https://blog.csdn.net/gpf0845531213/article/details/97662417

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

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

相关文章

vue3封装Element动态表单组件

1. 封装组件DymanicForm.vue 使用component实现动态组件组件不能直接使用字符串传入,所以根据传入的组件名称找到对应的组件校验规则,可使用rule传入自定义规则,也可以使用封装好的基本规则 示例中使用了checkRequired暴露重置方法和校验方法…

奥比中光深度相机(二):PyQt5实现打开深度摄像头功能

文章目录 奥比中光深度相机(二):PyQt5实现打开深度摄像头功能官方给出的调用深度相机源码环境精炼 UI界面设计逻辑代码构建槽函数连接提取视频流在界面中显示深度视频流注意关闭相机 总体代码效果演示运行main.py代码选择相机打开摄像头关闭摄…

没学数模电可以玩单片机吗?

我们首先来看一下数电模电在单片机中的应用。数电知识在单片机中主要解决各种数字信号的处理、运算,如数制转换、数据运算等。模电知识在单片机中主要解决各种模拟信号的处理问题,如采集光照强度、声音的分贝、温度等模拟信号。而数电、模电的相互转换就…

详解:JS的四种异步解决方案之分布/订阅,及其利弊。

上期讲了详解:JS异步解决方案之分布/订阅,及其弊端,原文链接在文章后面,分布/订阅是异步的一种方式而已,本期讲解第六个方案。 一、什么是分布/订阅 分布/订阅(Publish/Subscribe)是一种软件架…

信息流广告一键跳转企微,这个效果是怎么做的?

在数字化营销的浪潮之下,抖音巨量广告已然成为企业追求高效转化、扩大品牌影响力的得力助手。然而,如何将这些在抖音上活跃的潜在用户成功引流至企业微信,建立起稳定的私域流量池,一直是众多企业面临的挑战。现在,有了…

使用LLaVA模型实现以文搜图和以图搜图

本文将会详细介绍如何使用多模态模型——LLaVA模型来实现以文搜图和以图搜图的功能。本文仅为示例Demo,并不能代表实际的以文搜图和以图搜图的技术实现方案。 1、实现原理 使用多模态模型获取图片的标题和详细描述以文搜图功能:使用ES实现查询匹配&…

在线构建自动部署软件JPOM

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 简而轻的低侵入式在…

【Python函数和类2/6】函数的参数

目录 目标 为函数设置参数 传递实参 关键字实参 关键字实参的顺序 位置实参 常见错误 缺少实参 位置实参的顺序 默认值形参 参数的优先级 默认值形参的位置 总结 目标 上篇博客中,我们在定义函数时,使用了空的括号。这表示它不需要任何信息就…

课堂练习:环境体验——1、 Linux 文件目录

任务描述 欢迎进行Linux世界,当你下载、安装了某个Linux发行版,体验了Linux桌面并安装了一些你喜爱和需要的软件之后,应该去了解下Linux真正的魅力所在:命令行。 每一个Linux命令其实就是一个程序,借助这些命令&#…

uniapp 使用命令行创建vue3 ts 项目

命令行创建 uni-app 项目: vue3 ts 版 npx degit dcloudio/uni-preset-vue#vite-ts 项目名称注意 Vue3/Vite版要求 node 版本^14.18.0 || >16.0.0 如果下载失败,请去gitee下载 https://gitee.com/dcloud/uni-preset-vue/repository/archive/vite-ts…

ES学习日记(五)-------插件head安装

接上回,必要的git和node已经装完了,现在开始装head 回到es集群项目里找到plugins(插件文件夹下), 存在安装在plugins启动es报错的情况,报错信息如图一,解决方案就是换个目录,不要放在plugin目录下 git clone https://github.com/mobz/elasticsearch-head.git 打开远程登陆,默…

【微服务】Sentinel(流量控制)

文章目录 1.基本介绍1.Sentinel是什么2.Sentinel主要特性3.Sentinel核心功能1.流量控制2.熔断降级3.消息削峰填谷 4.Sentinel两个组成部分 2.Sentinel控制台显示1.需求分析2.下载3.运行1.进入cmd2.输入java -jar sentinel-dashboard-1.8.0.jar3.查看默认端口8080 4.访问1.账号和…