我目前正在尝试将所有应用程序的依赖项编译为静态库。我的动机:
- 不依赖任何操作系统提供的库以获得完美可重现的代码库
- 避免在其他系统上部署时由动态链接引起的问题
- 链接不同版本的库时避免运行时冲突
- 能够为其他操作系统交叉编译
然而,正如我最初担心的那样,我不得不很快地进入兔子洞。我目前坚持使用 OpenCV,我相信还有更多。但是,我的主要问题是:
- 是否可以构建一个完全静态构建的应用程序(例如 libc、ligcc 等?)
- 是否可以静态链接所有库但动态链接主要组件(libgcc 等)?
- 如果没有,是否可以链接到静态构建的库(例如 OpenCV),但通过动态链接(zlib、libc 等)来满足它们的依赖关系?
- 我在互联网上进行了研究,但找不到详细介绍链接内部结构(静态与动态)的综合指南。你知道一本好书/教程吗?一本关于 gcc 的书能让我走得更远吗?
- 这是一个非常愚蠢的想法吗?