我正在使用VS2008 WinCE7。我在构建期间遇到链接错误。
文件系统结构是
menu.c - ./menu.c
eboot.h - ./eboot.h
file_1.cpp - ./dir1/file_1.cpp
其中.
代表当前目录
menu.c
#include <eboot.h>
static VOID OALWriteToEMMC(OAL_BLMENU_ITEM *pMenu);
VOID OALWriteToEMMC(OAL_BLMENU_ITEM *pMenu)
{
OALTestEMMC();
}
file_1.cpp
#include <eboot.h>
VOID OALTestEMMC();
VOID OALTestEMMC()
{
//some code
}
eboot.h
VOID OALTestEMMC();
我收到了错误
menu.obj : error LNK2019: unresolved external symbol OALTestEMMC referenced in function OALWriteToEMMC
请指导我如何解决它。
EDIT1:
menu.c
#ifdef __cplusplus
extern "C" VOID OALTestEMMC();
#endif
并删除eboot.h
中的声明并将其添加到file_1.cpp
但是,错误仍然存在。
答案 0 :(得分:2)
您似乎正在编译C ++中的函数定义但是在C中使用该函数。如果不在C ++中使用函数extern "C"
,编译器将 mangle 这个名称,并且生成一个与C代码中使用的声明不匹配的符号。
如果要混合使用C和C ++,请确保将C ++中的声明标记为extern "C"
,以便编译器不会破坏名称并使用C调用约定。或者,用C ++(或C语言)编译所有内容
答案 1 :(得分:1)
extern "C" VOID OALTestEMMC();
extern "C" VOID OALTestEMMC() {
// stuff
}