我正在尝试从C ++调用C代码。我有3个文件:pubsub.cpp,pubsublib.c和pubsublib.h。
我知道我必须使用extern“ C”才能从C ++调用C函数。
我已经尝试了一切,但是仍然收到以下LNK2019无法解决的外部符号错误:


  LNK2019中解析的外部符号_thisIsATestFunction引用
  函数_main


pubsublib.c

#include "pubsublib.h"
void thisIsATestFunction()
{
    // do something
}


pubsublib.h

#ifndef pubsublib_H
#define pubsublib_H
void thisIsATestFunction();
#endif


pubsub.cpp

#include <string>
#include <iostream>

#ifdef __cplusplus
extern "C"{
#endif
    #include "pubsublib.h"
#ifdef __cplusplus
}
#endif

using namespace std;

int main() {
    thisIsATestFunction();
    return 0;
}


我也尝试只包含这些函数,但出现了同样的错误。我现在真的迷路了,已经搜寻了很多...任何帮助将不胜感激。

最佳答案

当您实际链接必要的文件时,它工作得很好。

编译pubsub.cpp时,必须在命令行中添加pubsublib.obj。例如,这使用Visual Studio 2015为我解决了问题:

cl -c pubsublib.c
cl pubsub.cpp pubsublib.obj


如果使用IDE进行构建,则只需确保pubsublib.c是依赖项,并将pubsublib.obj指定为链接步骤的输入。

09-08 09:49