-lstdc++與-static-libstdc++的用法和差異

CMakeLists.txt 里寫了:

target_link_libraries(${PROJECT_NAME} PRIVATEgccstdc++
)
target_link_options(${PROJECT_NAME} PRIVATE -static-libstdc++)

看起來像是“鏈接了兩次 C++ 標準庫”,其實它們的作用完全不同:


1. target_link_libraries(... stdc++)

  • 作用:顯式把 libstdc++.alibstdc++.so 鏈接進目標文件。
  • 這會讓鏈接器去找 -lstdc++,即 C++ 標準庫。
  • 如果用 C++ 源碼,通常編譯器會自動加上,但有些交叉編譯/特殊場景需要你手動加。

2. target_link_options(... -static-libstdc++)

  • 作用:告訴編譯器/鏈接器“用靜態方式鏈接 C++ 標準庫”,即強制用 libstdc++.a 而不是 libstdc++.so
  • 這是 GCC 的一個特殊選項,等價于命令行 -static-libstdc++
  • 它不是鏈接庫,而是改變鏈接方式。

為什么要兩個都寫?

  • 只寫 stdc++:鏈接器會找 C++ 標準庫,但可能用動態庫(.so)也可能用靜態庫(.a),取決于默認設置。
  • 只寫 -static-libstdc++:如果你的工程里沒有任何 C++ 源文件,鏈接器可能不會自動加 C++ 標準庫,導致鏈接失敗。
  • 都寫:最保險,既確保鏈接 C++ 標準庫,又確保用靜態方式。

總結

  • target_link_libraries(... stdc++)確保鏈接 C++ 標準庫
  • target_link_options(... -static-libstdc++)確保用靜態方式鏈接 C++ 標準庫

這兩句不是重復,而是配合使用,保證你的嵌入式/交叉編譯工程在所有場景下都能正確、靜態地鏈接 C++ 標準庫。


如需進一步精簡或自動判斷是否需要 stdc++,可以用 CMake 的條件判斷,但大多數嵌入式項目這樣寫最穩妥。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89367.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89367.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89367.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis學習其二(事務,SpringBoot整合,持久化RDB和AOF)

文章目錄5,事務5.1Redis 事務不保證原子性的原因5.2事務操作過程5.3監控6,SpringBoot整合Redis6.1Redis客戶端6.1.1Jedis簡單使用6.1.2Lettuce&Jedis6.2配置相關6.3使用6.3.1使用RedisTemplate6.3.2Redis工具類7,持久化RDB7.1RDB持久化原理7.2觸發機制save命令flushall命令…

springboot項目部署到K8S

java后臺 創建harbor鏡像拉取Secret:kubectl create secret docker-registry harbor-regcred \--docker-server \ #harbor倉庫地址--docker-username \ #harbor 賬號--docker-password \ #harbor密碼-n productionDockerfile FROM *harbor地址*/library/custom-jdk…

【FPGA開發】一文輕松入門Modelsim的基本操作

Modelsim仿真的步驟 (1)創建新的工程。 (2)在彈出的窗口中,確定項目名和工作路徑,庫保持為work不變(如有需要可以根據需求進行更改)。 (3)添加已經存在的文件(rtl代碼和t…

服務攻防-Java組件安全FastJson高版本JNDI不出網C3P0編碼繞WAF寫入文件CI鏈

服務攻防-Java組件安全&FastJson&高版本JNDI&不出網C3P0&編碼繞WAF&寫入文件CI鏈26天 原創 朝陽 Sec朝陽 2025年07月18日 09:23 湖北 標題已修改 演示環境: https://github.com/lemono0/FastJsonParty FastJson全版本Docker漏洞環境(涵蓋1.…

【Python】DRF核心組件詳解:Mixin與Generic視圖

在 Django REST Framework (DRF) 中,mixins.CreateModelMixin、mixins.ListModelMixin、GenericAPIView 和 GenericViewSet 是構建 API 視圖的核心組件。以下是對這些組件的主要方法及其職責的簡要說明,內容清晰且結構化:1. mixins.CreateMod…

HTML+CSS+JS基礎

文章目錄(一)html1.常見標簽(1)注釋(2)標題 h1~h6(3)段落 p(4)換行與空格 br \ (5)格式化標簽 b i s u(6)…

Vue導出Html為Word中包含圖片在Microsoft Word顯示異常問題

問題背景 碰到一個問題:將包含圖片和SVG數學公式的HTML內容導出為Word文檔時,將圖片都轉為ase64格式導出,在WPS Word中顯示正常,但是在Microsoft Word中出現圖片示異常。具體問題表現 WPS兼容性:在WPS中顯示正常&#…

橢圓曲線密碼學 Elliptic Curve Cryptography

密碼學是研究在存在對抗行為的情況下還能安全通信的技術。即算法加密信息,再算法解密出信息。加密分為兩類 1. Symmetric-key Encryption (secret key encryption) 即一種密鑰,加密和解密使用同一密鑰,可相互轉換 2. Asymmetric-key Encry…

wedo牛-----第47節(免費分享圖紙)

夸克網盤:https://pan.quark.cn/s/4b40a8d18979 高清圖紙源文件,需要的請自取

Unity | AmplifyShaderEditor插件基礎(第十集:噪聲的種類+火焰制作-下)

目錄 一、👋🏻前言 二、圓火焰 三、制作梯度 梯度成品預覽 1.GradientSample節點 2.gradient的用法 3.time節點 四、添加顏色 Color節點 五、火焰搖擺 1.X方向的移動 2.Y方向的移動 3.Z方向的移動 4.把xyz組合起來 Panner節點 六、擺放和…

黑馬Node.js全套入門教程,nodejs新教程含es6模塊化+npm+express+webpack+promise等_ts對象筆記

1.1 什么是運行環境? 運行環境是指代碼正常運行所需的必要環境!!!!! V8引擎負責解析和執行JavaScript代碼。內置API是由運行環境提供的特殊接口,只能在所屬的運行環境中被調用 1.2 JavaScrip…

React 項目環境變量使用指南

在 React 項目中正確使用環境變量是管理不同環境配置的關鍵技術。以下是完整的解決方案: 1. 創建環境變量文件 React 項目支持以下環境變量文件(按優先級從高到低): .env.development.local (本地開發環境).env.development (開發…

Oracle 關于一些連接故障的總結

積累了幾次Oracle客戶端連接故障,做下總結。 文章目錄1、案例案例1:客戶端連接報錯ORA-12514案例2:客戶端連接報錯ORA-28547案例3:客戶端連接報錯:Got minus one from a read call案例4:客戶端連接報錯&…

V-USB USB設備模擬原理分析

V-USB USB設備模擬原理分析 通過分析V-USB項目的核心文件,詳細解釋這個項目是如何在AVR微控制器上模擬USB設備的: 1. 整體架構 V-USB是一個純軟件實現的USB低速設備驅動,主要由以下幾個核心文件組成: usbdrv.c : USB協議棧的C語言…

kafka3.6下載安裝(傳統架構/KRaft模式)+實例測試

知識補充: Kafka 和 ZooKeeper 的關系可以用 “協作依賴” 來概括。在 Kafka 的早期版本(Kafka 2.8.0 之前)中,ZooKeeper 是 Kafka 的核心依賴,用于管理集群元數據、協調 Broker 和 Controller 選舉等關鍵功能。但從 …

華控智能產品特點——產品生態全景與場景化創新

公司構建 “3X”產品戰略,以三大核心場景為基礎持續拓展技術外延: 1. 智能安防產品線軍工級指紋槍盒:采用6061-T6航空鋁材,內嵌震動報警模塊,非法開箱觸發90dB警鳴。為軍工企業定制的雙人認證版本需兩位授權人員同時驗…

爬蟲核心原理與入門技巧分析

一、爬蟲核心原理:模擬人類瀏覽的“自動化工具” 簡單來說,網絡爬蟲(Web Crawler)是一種按照一定規則,自動抓取互聯網信息的程序或腳本。其核心原理可以類比人類瀏覽網頁的過程,只不過將手動操作轉化為了代…

spring-cloud微服務部署-feign服務間調用

1 準備工作 需要安裝并啟動nacos&#xff0c;作為服務注冊中心。地址&#xff1a;https://nacos.io/ 2 項目結構 parent的pom.xml聲明依賴&#xff1a; <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</gr…

IDEA高效開發:Database Navigator插件安裝與核心使用指南

目錄 1.前言 2.正文 2.1安裝流程 2.1.1IDE內部安裝 2.1.2手動下載安裝 ?? 避坑指南 2.2使用教程 2.2.1連接數據庫 2.2.2查看數據庫/表 2.2.3查詢數據 2.2.4修改表結構 2.2.5生成代碼 2.2.6常見故障排除 3.小結 1.前言 “作為Java開發者&#xff0c;日常與數據…

Maven私服倉庫,發布jar到私服倉庫,依賴的版本號如何設置,規范是什么

Maven私服倉庫&#xff0c;發布jar到私服倉庫&#xff0c;依賴的版本號如何設置&#xff0c;規范是什么