我正在尝试从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指定为链接步骤的输入。