为什么我 link 到库时会出错,而构建库时却不会?

Why do I get errors when I link to a library, but not when I build it?

我正在为 c++ 库 (ITK) 开发一个外部模块,我正在使用 cmake 和 make 构建它(我在 Ubuntu VM 上)。

假设代码中有错误,比如重新定义了一个方法。在这种情况下,库使用 cmake ../src && make && sudo make install 构建时没有错误,但是当我尝试 link 针对库的项目时出现错误。

为什么错误不会停止库构建?这些场景是否有根本不同导致 make 表现不同?

我对 C++(通常对编译语言)还很陌生——我想构建过程中有一些我不理解的基础知识。我发现很难搜索这个——搜索 "c++ library build no error" 给了我很多关于 c++ 库构建错误的线索。

一般来说,库只是编译代码的集合 - 目标文件。通常,您看到的链接错误只会在您创建可执行文件时被拾取,此时链接器将尝试确保您的可执行文件中使用的所有符号都可以通过您链接的库来解析。

如果符号(函数、常量等)的定义找不到或不明确(即可以在多个地方找到,则链接将失败。

在链接时,它会检查交叉引用、符号(函数、标识符等)定义和调用,或者使用在静态链接中绑定(动态链接不同,因为这是延迟链接,所以可能无法进行交叉引用).库是函数或标识定义的简单集合,不做交叉引用。