我创建了一个MSVS2015项目(MFC/C++),其中 链接到一个静态C库。当我建立 项目,我得到以下错误:LNK2019:从CPP代码调用C函数
error LNK2019:
unresolved external symbol "void __cdecl testLinkerError(void)" ([email protected]@YAXXZ) referenced
in function "void __cdecl test1(void)" ([email protected]@YAXXZ) [PATH_REMOVED]\test.obj [NAME_OF_MFC_PROJECT]
出于调试目的,我创建了3个文件:
test.cpp
linkertest.c
linkertest.h
- TEST.CPP已添加到MFC项目,它看起来像这样:
#include "linkertest.h" void test1(void) { testLinkerError(); }
- 头文件linkertest.h如下:
- 而linkertest.c看起来是这样的:
#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
你确定你的编译器提供'_cplusplus'吗?我从来没有见过它,带有两条主要的下划线,据我所知,这是最接近你的任何“标准”。你确定你已经在项目设置的Additional Libraries部分中包含了**。lib **文件_and_它是为你正在编译的构建配置设置的吗? – paddy
刚看到@ paddy的评论,我相信这是正确的答案。 FWIW链接器错误表明C++编译忽略了'extern“C”'部分,详细信息请参见[名称装饰](https://msdn.microsoft.com/zh-cn/library/dexefa7.aspx)。 – dxiv
我需要一把枪,所以我可以在头部拍摄自己。让我试着修复这个错字。 – user1884325