我在混合C ++和C代码时遇到问题。我的C ++代码是在VS10中创建的,即一个Windows Form项目。我想通过链接器(.obj)在C ++函数中包含C函数。步骤是:
每个对象文件都放在手中(Cpp和C),这些对象将链接到第三个makefile中。这是一个简单的想法,但不起作用。 msbuild中的构建显示以下消息:
错误LNK2028:未解析的令牌(0A00000C)“外部” C“ void __clrcall MinhaFuncao(void)”(?MinhaFuncao @@ $$ J0YMXXZ)在函数“ int __clrcall main(cli :: array ^)”中引用? @@ $$ HYMHP $ 01AP $ AAVString @ System @@@@ Z)
错误LNK2019:未解析的外部符号“ extern“ C” void __clrcall MinhaFuncao(void)”(?MinhaFuncao @@ $$ J0YMXXZ)在函数“ int __clrcall main(cli :: array ^)”中引用(?main @@ $$ HYMHP $ 01AP $ AAVString @ System @@@@ Z)
Cpp代码:
#include "stdafx.h"
#include "Form1.h"
//#include"complex.h"
extern "C" {
#include "complex.h"
}
/*extern "C" {
void MinhaFuncao();
}*/
extern "C" void MinhaFuncao();
using namespace WFormTesting;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
MinhaFuncao(); //<--- Calling the Function HERE -->
// Create the main window and run it
Application::Run(gcnew Form1());
return 0;
}
C代码:
#include "complex.h"
void MinhaFuncao()
{
printf("My function AOWWW.\n");
}
头文件:
#ifndef COMPLEX_H_
#define COMPLEX_H_
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdio.h>
void MinhaFuncao();
#ifdef __cplusplus
} // extern "C"
#endif
#endif
有人对这个问题有想法吗?我阅读了其他有关链接器问题的文章,但提出的解决方案对我不起作用。我相信差异是由于msbuild和VS项目...:/
答案 0 :(得分:0)
您正在extern C块中使用extern“ C”
删除外部外部C块周围
#include "complex.h"