簡體   English   中英

如何創建與 c/c++ 標准庫靜態鏈接的 static 庫?

[英]How to create a static library that is statically linked against c/c++ standard libraries?

我想創建一個簡單的 static 庫my_math.lib 其header和源文件如下。

// my_math.h
#ifndef MY_MATH_H
#define MY_MATH_H

double reciprocal(double d);
#endif

// my_math.cpp
#include "my_math.h"
#include <iostream>
double reciprocal(double d)
{
    std::cout << __func__ << std::endl;

    return 1.0 / d;
}

為了學習的目的,我把它編譯成discreate步驟如下:

  1. 預處理: cpp my_math.cpp > my_math.ii
  2. 編譯: g++ -S my_math.ii (其中output默認為my_math.s
  3. 組裝: as my_math.s -o my_math.o
  4. 歸檔: ar rvs my_math.a my_math.o

問題

如您所見,我上面的庫使用了 c/c++ 標准庫中定義的cout

出於學術目的,是否可以創建一個靜態鏈接到 c/c++ 庫的 static 庫my_math.lib 我沒有找到任何說明如何做到這一點的文章。

我們是否可以擴展歸檔步驟以包括 static 與 c/c++ 標准庫的鏈接? 換句話說,是否可以在創建 static 庫時使用g++提供的-static選項?

編輯:

由於預期的my_math.lib包含我自己的代碼和 c/c++ 標准庫,因此使用my_math.lib的人只需要同時擁有my_math.hiostream ,並靜態鏈接到my_math.lib 生成的.exe二進制文件不再需要 c/c++ 運行時。 這是我想要達到的學術目的的場景!

謝謝彼得T 在此處輸入圖像描述 通知我有關如何合並兩個檔案或 static 庫的鏈接。

我希望這個答案將來對其他人也有用。 在這里,我想將my_math.alibstdc++.a合並。

  1. 使用ar x my_math.a my_math.o my_math.a中提取 my_math.o。
  2. 還使用ar x libstdc++.alibstdc++.a中提取所有 object .o文件。
  3. 可以選擇使用del my_math.adel libstdc++.a刪除兩個檔案。
  4. 使用ar c libmerged.a *.o歸檔所有 object 文件。

完畢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM