![](/img/trans.png)
[英]Linking a Common Language Runtime (/clr) .dll to static libraries statically linked to the C/C++ Runtime Library
[英]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步驟如下:
cpp my_math.cpp > my_math.ii
g++ -S my_math.ii
(其中output默認為my_math.s
)as my_math.s -o my_math.o
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.h
和iostream
,並靜態鏈接到my_math.lib
。 生成的.exe
二進制文件不再需要 c/c++ 運行時。 這是我想要達到的學術目的的場景!
謝謝彼得T 通知我有關如何合並兩個檔案或 static 庫的鏈接。
我希望這個答案將來對其他人也有用。 在這里,我想將my_math.a
與libstdc++.a
合並。
ar x my_math.a
my_math.o
my_math.a
中提取 my_math.o。ar x libstdc++.a
從libstdc++.a
中提取所有 object .o
文件。del my_math.a
和del libstdc++.a
刪除兩個檔案。ar c libmerged.a *.o
歸檔所有 object 文件。完畢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.