LNK2019:从CPP代码调用C函数

时间:2016-02-10 03:50:58

标签: c++ c visual-studio mfc visual-studio-2015

我创建了一个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
  1. test.cpp已添加到MFC项目中,它看起来像这样:
  2. #include "linkertest.h"
    
    void test1(void)
    {
       testLinkerError();
    }
    
    1. 头文件linkertest.h如下所示:
    2. #pragma once
      
      #ifdef _cplusplus
      extern "C" {
      #endif
      
      void testLinkerError(void);
      
      #ifdef _cplusplus
      }
      #endif
      
      1. 而linkertest.c看起来像这样:
      2. #include "linkertest.h"
        
        void testLinkerError(void) {    
             int x = 5;    
             int y = 7;    
             int z = x + y; 
          }
        

        我很确定这是某种名称错位问题,但我无法弄清楚如何解决它。 两个项目中的调用约定都设置为__cdecl

1 个答案:

答案 0 :(得分:2)

基于编译器错误,编译器试图查找{C}函数名?testLinkerError@@YAXXZ。所以这意味着你的导入部分(不是你的DLL导出)你没有使用extern "C" ....

还有一件事,在编译C ++转换单元时,名称__cplusplus(两个下划线)被定义为值201402L。请检查您的代码,确保定义了_cplusplus(一个下划线)。