我创建了一个MSVS2015项目(MFC / C ++) 链接静态C库。当我建立 项目我收到以下错误:
error LNK2019:
unresolved external symbol "void __cdecl testLinkerError(void)" (?testLinkerError@@YAXXZ) referenced
in function "void __cdecl test1(void)" (?test1@@YAXXZ) [PATH_REMOVED]\test.obj [NAME_OF_MFC_PROJECT]
出于调试目的,我创建了3个文件:
test.cpp
linkertest.c
linkertest.h
#include "linkertest.h" void test1(void) { testLinkerError(); }
#pragma once #ifdef _cplusplus extern "C" { #endif void testLinkerError(void); #ifdef _cplusplus } #endif
#include "linkertest.h" void testLinkerError(void) { int x = 5; int y = 7; int z = x + y; }
我很确定这是某种名称错位问题,但我无法弄清楚如何解决它。 两个项目中的调用约定都设置为__cdecl
答案 0 :(得分:2)
基于编译器错误,编译器试图查找{C}函数名?testLinkerError@@YAXXZ
。所以这意味着你的导入部分(不是你的DLL导出)你没有使用extern "C"
....
还有一件事,在编译C ++转换单元时,名称__cplusplus
(两个下划线)被定义为值201402L。请检查您的代码,确保定义了_cplusplus
(一个下划线)。