recompile with -fPIC

来源:https://www.cnblogs.com/xupeidong/archive/2022/11/18/16902520.html
-Advertisement-
Play Games

故事背景 最近同事遇到一個比較奇怪的問題,直接開門見山吧。在動態庫中調用靜態庫直接報錯了recompile with -fPIC,查看cmake的寫法也沒有問題,而且也是第一次遇見這個問題,所以就開啟了我的好奇之路。 探索之路 說實話我不喜歡百度,因為千篇一律,你抄我的我抄你的,沒有任何參考價值,直 ...


故事背景

最近同事遇到一個比較奇怪的問題,直接開門見山吧。在動態庫中調用靜態庫直接報錯了recompile with -fPIC,查看cmake的寫法也沒有問題,而且也是第一次遇見這個問題,所以就開啟了我的好奇之路。

探索之路

  1. 說實話我不喜歡百度,因為千篇一律,你抄我的我抄你的,沒有任何參考價值,直接google吧,都是一些英文的解析文檔,基本上都能解決你遇到的問題。
  2. Briefly, the error means that you can't use a static library to be linked w/ a dynamic one.這句話我就不翻譯了。
  3. The solution was to compile everything with -fPIC, and link shared objects with -shared.Add -fPIC to CFLAGS or CXXFLAGS for make-based projects.這句也不翻譯了,我覺得還是看英文比較好理解,翻譯出來沒有那個感覺。

經驗心得

In a word

  1. 動態庫中不可以鏈接靜態庫
  2. 如果想在動態庫中鏈接靜態庫,需要加上-fPIC重新編譯靜態庫,然後再在動態庫中鏈接就可以了。
  3. 查看是不是添加了-fPIC的命令:readelf -d xxx.so | grep TEXTREL
  4. cmake中直接設置set(CMAKE_CXX_FLAGS "-fPIC")

大家有興趣的可以自行瞭解下-fPIC的作用。

走的太遠不要忘記為什麼出發,你的態度決定你的高度。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在上一篇中通過閱讀Seata服務端的代碼,我們瞭解到TC是如何處理來自客戶端的請求的,今天這一篇一起來瞭解一下客戶端是如何處理TC發過來的請求的。要想搞清楚這一點,還得從GlobalTransactionScanner說起。 啟動的時候,會調用GlobalTransactionScanner#ini ...
  • java8 (jdk 1.8) 新特性 ——初步認識 1. 什麼是lambda? 目前已知的是,有個箭頭 -> 說一大段官方話,也沒有任何意義 我們直接看代碼: 之前我們創建線程是這樣的 Runnable runnable = new Runnable() { @Override public vo ...
  • 1./*(註釋內容,不做編譯)*/ 2.//(註釋內容) 3.“#”不能忘; 4.scanf中的取地址符不能忘帶; 5.如在scanf中輸入轉義符號外的文字或其他,則編譯出的控制台輸入時必須把輸入的其他原樣再輸入一遍;(否則如圖二) 6.printf中別慣性加了取地址符; 7.分數表示時需特別註意( ...
  • 基於 SpringWeb(5.3.23)的介面請求分析 前情提要 假定當前 Web 項目中有如下實體類和介面: package com.example.entity; public class WebUser { private String name; private Integer age; p ...
  • 創建第一個springmvc程式 1、創建父項目文件,導入依賴,刪除src文件夾 pom.xml文件 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</ ...
  • 算術運算符 +(加) -(減) *(乘) /(除) %(取餘) ++(自增) --(自減) 註意:/(除):兩個整數相除,其結果一定是整數,小數位電腦自動略去 例: int num1 = 15; int num2 = 4; 1. int result = num1/num2; system.out ...
  • 目錄 一.簡介 1.freeglut 2.glew 3.glut 4.glfw 5.glad 二.分類 1.視窗管理 2.函數載入 三.組合使用 1.freeglut + glew 2.glfw + glew 3.glfw + glad 四.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : O ...
  • 繼承: 強調類與類之間的關係 組合: 強調對象和對象之間的關係 清楚python支持多繼承,從而涉及到一些MRO的點,這裡不做贅述,在實際工作過程中,我們經常會使用繼承來實現代碼復用,如果僅僅是為了復用,還是比較推薦使用組合方式,因為繼承方式,使得類與類之間的耦合性變得異常緊密,這多少違背了迪米特法 ...
一周排行
    -Advertisement-
    Play Games
  • 最近做項目過程中,使用到了海康相機,官方只提供了C/C++的SDK,沒有搜尋到一個合適的封裝了的C#庫,故自己動手,簡單的封裝了一下,方便大家也方便自己使用和二次開發 ...
  • 前言 MediatR 是 .NET 下的一個實現消息傳遞的庫,輕量級、簡潔高效,用於實現進程內的消息傳遞機制。它基於中介者設計模式,支持請求/響應、命令、查詢、通知和事件等多種消息傳遞模式。通過泛型支持,MediatR 可以智能地調度不同類型的消息,非常適合用於領域事件處理。 在本文中,將通過一個簡 ...
  • 前言 今天給大家推薦一個超實用的開源項目《.NET 7 + Vue 許可權管理系統 小白快速上手》,DncZeus的願景就是做一個.NET 領域小白也能上手的簡易、通用的後臺許可權管理模板系統基礎框架。 不管你是技術小白還是技術大佬或者是不懂前端Vue 的新手,這個項目可以快速上手讓我們從0到1,搭建自 ...
  • 第1章:WPF概述 本章目標 瞭解Windows圖形演化 瞭解WPF高級API 瞭解解析度無關性概念 瞭解WPF體繫結構 瞭解WPF 4.5 WPF概述 ​ 歡迎使用 Windows Presentation Foundation (WPF) 桌面指南,這是一個與解析度無關的 UI 框架,使用基於矢 ...
  • 在日常開發中,並不是所有的功能都是用戶可見的,還在一些背後默默支持的程式,這些程式通常以服務的形式出現,統稱為輔助角色服務。今天以一個簡單的小例子,簡述基於.NET開發輔助角色服務的相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 第3章:佈局 本章目標 理解佈局的原則 理解佈局的過程 理解佈局的容器 掌握各類佈局容器的運用 理解 WPF 中的佈局 WPF 佈局原則 ​ WPF 視窗只能包含單個元素。為在WPF 視窗中放置多個元素並創建更貼近實用的用戶男面,需要在視窗上放置一個容器,然後在這個容器中添加其他元素。造成這一限制的 ...
  • 前言 在平時項目開發中,定時任務調度是一項重要的功能,廣泛應用於後臺作業、計劃任務和自動化腳本等模塊。 FreeScheduler 是一款輕量級且功能強大的定時任務調度庫,它支持臨時的延時任務和重覆迴圈任務(可持久化),能夠按秒、每天/每周/每月固定時間或自定義間隔執行(CRON 表達式)。 此外 ...
  • 目錄Blazor 組件基礎路由導航參數組件參數路由參數生命周期事件狀態更改組件事件 Blazor 組件 基礎 新建一個項目命名為 MyComponents ,項目模板的交互類型選 Auto ,其它保持預設選項: 客戶端組件 (Auto/WebAssembly): 最終解決方案裡面會有兩個項目:伺服器 ...
  • 先看一下效果吧: isChecked = false 的時候的效果 isChecked = true 的時候的效果 然後我們來實現一下這個效果吧 第一步:創建一個空的wpf項目; 第二步:在項目裡面添加一個checkbox <Grid> <CheckBox HorizontalAlignment=" ...
  • 在編寫上位機軟體時,需要經常處理命令拼接與其他設備進行通信,通常對不同的命令封裝成不同的方法,擴展稍許麻煩。 本次擬以特性方式實現,以兼顧維護性與擴展性。 思想: 一種命令對應一個類,其類中的各個屬性對應各個命令段,通過特性的方式,實現其在這包數據命令中的位置、大端或小端及其轉換為對應的目標類型; ...