需求

编译的时候,提示 undefined reference to

解决

这种问题经常会碰到,一般就是相关源文件没有在编译列表里面,结果经过仔细查找,都添加进去了。后来经过仔细查找,发现原来是 c++c 混合编译的问题,在 c++ 中文件里面调用的函数,其所在的头文件没有使用 extern "C" 包含,导致的。想要修改也很简单,不需要改动头文件,只需要在 c++ 文件中这样:

#include "gx_api.h"
extern "C" {
#include "gx_display.h"
}

而且其实在 map 文件中是有相关线索的,下面分别是没有用 extern 包含,和用了 extern 包含的 map 文件中的函数信息。可以明显看到有 extern 包含的,有相关地址。

.text._gx_display_driver_565rgb_setup
	     0x0000000000000000      0x260 ./guix/common/src/gx_display_driver_565rgb_setup.o
.text._gx_display_driver_565rgb_setup
	     0x000000000801e6e8      0x260 ./guix/common/src/gx_display_driver_565rgb_setup.o
	     0x000000000801e6e8                _gx_display_driver_565rgb_setup

参考