[英]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.