[英]Does -static-libstdc++ GCC flag affect the generation of a static library (*.a) on Linux
問題來自以下情形:
有一個靜態c ++庫A和一個可執行文件B ,它們鏈接到A。 我希望B獨立於c ++運行時。
我知道使用MSVC,如果A使用/MD
標志進行編譯,則B絕對取決於msvc * .dll。
但是我對-static-libstdc++
對於Linux上的GCC是否起相同作用感到困惑。
我的問題是在Linux上使用GCC,我編譯A時是否需要使用-static-libstdc++
,否則它只是一個鏈接器標志,根本不影響A。
提前致謝。
我相信答案是肯定的(但尚未嘗試過)。
原因是代碼訪問動態庫中的符號與靜態符號(可執行文件中的符號)的方式不同。 您所用的是庫A。
對於靜態符號,鏈接可執行文件后,這些符號將解析為內存地址。 實際上,符號的名稱根本不必保存在可執行文件中(這稱為“剝離”可執行文件)。
對於動態庫中的符號,必須確實顯示符號名稱,並且可執行文件中的代碼會對其進行訪問以加載符號(可能使用dlopen
和dlsym
類的函數)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.