使用未定义的符号构建库 (C++)
Building a library with undefined symbols (C++)
我在C++中有一个项目/产品的线性依赖树:
Product <- C <- B <- A
A, B
和C
分别是单独构建的。 A,B
和C
在最终Product
中链接,并且工作正常。
现在,当我使用 nm 检查例如C
时:
http://linux.about.com/library/cmd/blcmdl1_nm.htm
我按预期得到了一堆未定义的符号,因为它第一次组装了所需的依赖树链接在一起Product
。
是否有任何约定,即库必须始终定义其所有符号(这意味着在部署之前必须将依赖项链接到使用库)?或者是否可以接受在更高级别部署与其依赖项链接在一起的"裸"库?
来自 Windows 世界:
我见过它在公司内部使用。 将代码库分成几个静态库,并根据每个产品的需求以不同的组合将它们链接在一起。
我也在公共 SDK 中看到过它,其中功能在多个 DLL 之间划分,其中一些相互依赖,其他是可选的,具体取决于您需要的功能。
这对我来说并不罕见。
我也见过。这发生在许多遗留软件中。该库在开始时可能设计得很好,然后后来制作了一些软件模组,事情变得有点草率。它全部编译和运行,但库并没有完全封装它们最初所做的任何功能集。
这是一个商业决策。要修复它,可能需要大量的工作和重新测试才能最终得到相同的产品。随着时间的推移,慢慢重构有意义的库更有意义......或者在下一个主要版本的功能影响库时完全替换它们。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 构建一个由C和C++文件组成的库
- llvm构建器向基本块添加终止符
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 如何跨平台将二进制资源构建到程序中?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 如何解决 Ninja c++ 构建和执行问题
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 用CMake构建C++协议
- Mingw-64 在构建和安装后不会编译 openCV 代码