我正在写一个库。我有以下结构:
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部分。我无法找到任何关于这方面的有用信息。
1条答案
按热度按时间gcxthw6b1#
一个静态库实际上只不过是一个目标文件的存档。与一个静态库的链接等价于与库中所有单独的目标文件的链接。
因此,静态库没有关于依赖关系或其他所需库的信息。静态库甚至没有链接,对象文件只是添加到存档中。
这就是为什么您需要自己显式地链接静态库的依赖项。