需求
编译的时候,提示 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