【发布时间】:2016-02-10 03:50:58
【问题描述】:
我创建了一个 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
- test.cpp 已添加到 MFC 项目中,如下所示:
#include "linkertest.h" void test1(void) { testLinkerError(); }
- 头文件linkertest.h如下所示:
#pragma once #ifdef _cplusplus extern "C" { #endif void testLinkerError(void); #ifdef _cplusplus } #endif
- linkertest.c 看起来像这样:
#include "linkertest.h" void testLinkerError(void) { int x = 5; int y = 7; int z = x + y; }
我很确定这是某种名称修改问题,但我不知道如何解决它。 两个项目中的调用约定都设置为 __cdecl
【问题讨论】:
-
你确定你的编译器提供
_cplusplus吗?我只见过它带有 两个 前导下划线,据我所知,这是最接近任何“标准”的。您确定您已将 .lib 文件包含在您的项目设置的 Additional Libraries 部分中并且它是为您正在编译的构建配置设置的吗?跨度> -
刚刚看到@paddy 的评论,我相信这是正确的答案。 FWIW 链接器错误表明 C++ 编译忽略了
extern "C"部分,有关详细信息,请参阅Name Decoration。 -
我需要一把枪,这样我才能射中自己的头部。让我试着改正那个错字。
-
这是一个常见的误解,认为这需要一把枪,而实际上使用弩或坠落的钢琴可以达到相同的最终结果...... ;) 但说真的,请不要伤害自己。这不是从错误中吸取教训的有效方法。
标签: c++ c visual-studio mfc visual-studio-2015