尝试将静态 C 库与 C 代码链接时,通常会遇到“未定义的引用”错误。即使在调整目标文件和链接标志的顺序后,这些错误也会出现。但是,此问题是 C 链接独有的,因为使用同一库的其他 C 程序不会遇到这些错误。
C 和 C 编译之间的关键区别是名称修改。 C 程序员可以自由地使用声明的函数名称,而 C 会破坏函数、类和模板的名称,以防止在编译多个源文件时发生命名冲突。
当将静态 C 库与 C 代码链接时,链接器期望将损坏的符号名称作为引用。然而,C 库提供了未损坏的符号,导致“未定义的引用”错误。
要解决这些错误,可以使用 extern“C”块用于抑制特定范围的 C 名称修改,包含与 C 库交互的函数声明。通过这样做,链接器将识别未损坏的引用并成功链接库。
另一种有效的方法是将函数声明包装在带有预处理器指令的头文件中,这些预处理器指令根据编译是 C 还是 C 进行条件编译C.这种方法可确保根据编译上下文使用正确的函数名称。
以上是为什么在将静态 C 库与 C 代码链接时出现'未定义的引用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!