C语言 为什么将libm链接到库需要使用我的库将libm链接到可执行文件?

wrrgggsh  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(163)

我正在写一个库。我有以下结构:

src/
├── Logger
│   ├── CMakeLists.txt
│   ├── Logger.c
│   ├── Logger.h
├── Task
│   ├── CMakeLists.txt
│   ├── Task.c
└── ThreadPool
    ├── CMakeLists.txt
    ├── Thread.c
    ├── Thread.h
    ├── ThreadPool.c
    ├── ThreadPool.h

CMakeLists.txt非常简单。我有一个顶级的CMakeLists.txt,其中包含了这些文件。因此我得到了一个静态库。然后我搜索所有的目标文件,并将它们合并到一个libsomething.a文件中。(目前不是最好的方法,但我喜欢cmake,但需要学习更多关于编译的知识,以了解cmake的给予功能)
这工作得很好,符合我的需要,但是如果用我的库编译一个可执行文件,我需要链接到libm,我真的不知道为什么。我假设这是因为我编译一个静态库而没有使用libm.a,或者为什么?
我希望最终用户只链接到我的库,这样他就不必链接到其他非libc部分。我无法找到任何关于这方面的有用信息。

gcxthw6b

gcxthw6b1#

一个静态库实际上只不过是一个目标文件的存档。与一个静态库的链接等价于与库中所有单独的目标文件的链接。
因此,静态库没有关于依赖关系或其他所需库的信息。静态库甚至没有链接,对象文件只是添加到存档中。
这就是为什么您需要自己显式地链接静态库的依赖项。

相关问题