繁体   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