将静态 C 库与 C 代码链接时出现未定义引用错误
将 C 程序与静态 C 库链接时,“未定义引用” " 即使在链接命令中指定了库名称,也可能会发生错误。此问题的出现是由于 C 和 C 编译过程之间的差异。
在 C 中,编译器执行名称重整,将函数符号转换为目标文件中的重整名称。但是,C 库函数不会进行名称修改。因此,链接器在将目标文件中的损坏函数名称与库中未损坏的函数名称进行匹配时遇到困难,从而导致未定义的引用错误。
解决方案
要解决此问题,链接 C 库的 C 程序应使用 extern“C”块。该块禁止对其内的所有声明和定义进行名称修改。通过将库函数声明封装在 extern "C" 块中,链接器可以识别它们并解决未定义的引用错误。
或者,可以将包含库函数声明的头文件包装在条件声明中以区分C 和 C 编译环境。对于 C 编译,声明应包含在 extern "C" {} 块中。这确保了库函数的名称修改抑制,并允许成功链接而不会出现未定义的引用错误。
以上是为什么将静态 C 库链接到 C 代码时会出现'未定义的引用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!