新建一个空的控制台程序,然后分别加入convert.h,convert.cpp,test.c三个文件.
//convert.h
extern void testPrint();
//convert.cpp
#include <stdio.h>
#include "convert.h"
void testPrint()
{
printf("Enter testPrint\n");
}
//test.c
#include <stdio.h>
#include "convert.h"
int main()
{
//调用该函数,提示错误如下:
//error LNK2001: unresolved external symbol _testPrint
testPrint();
system ("pause");
}
11 个解决方案
#1
//调用该函数,提示错误如下:
//error LNK2001: unresolved external symbol _testPrinttestPrint();
//error LNK2001: unresolved external symbol _testPrinttestPrint();
#2
cpp 头文件声明该函数的时候用 extern "c" 修饰
#3
//convert.cpp
#include <stdio.h>
#include "convert.h"//去掉这里的看看
void testPrint()
{
printf("Enter testPrint\n");
}
#4
把CPP源码相关的所有内容编译成LIB或者DLL。
然后头文件中的接口使用:extern "C" { /* 这里写声明 */ } 包围起来。
之后链接即可。
然后头文件中的接口使用:extern "C" { /* 这里写声明 */ } 包围起来。
之后链接即可。
#5
在C中引用C++语言中的函数和变量时,C++的头文件需添加extern "C",但是在C语言中不能直接引用声明了extern "C"的该头文件,应该仅将C文件中将C++中定义的extern "C"函数声明为extern类型。
如:
//C++头文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern "C" int add( int x, int y );
#endif
//C++实现文件 cppExample.cpp
#include "cppExample.h"
int add( int x, int y )
{
return x + y;
}
/* C实现文件 cFile.c
/* 这样会编译出错:#include "cExample.h" */
extern int add( int x, int y );
int main( int argc, char* argv[] )
{
add( 2, 3 );
return 0;
}
如:
//C++头文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern "C" int add( int x, int y );
#endif
//C++实现文件 cppExample.cpp
#include "cppExample.h"
int add( int x, int y )
{
return x + y;
}
/* C实现文件 cFile.c
/* 这样会编译出错:#include "cExample.h" */
extern int add( int x, int y );
int main( int argc, char* argv[] )
{
add( 2, 3 );
return 0;
}
#6
这里extern "C"用不起来
error C2059: syntax error : 'string'
//convert.h
extern "C" void testPrint();
error C2059: syntax error : 'string'
#7
因为工程中.C文件和.CPP文件代码比较多,
所以想能不封装成DLL的话,尽量不封装.
如果不封装DLL的话,这个问题不知道是否好解决...
所以想能不封装成DLL的话,尽量不封装.
如果不封装DLL的话,这个问题不知道是否好解决...
#8
这三个文件,是新建一个 空的控制台程序,
然后又加入的.
然后又加入的.
#9
可以生成静态lib。
在.c文件中 引用头文件处用extern "c"包起来。
#10
++
#11
谢谢楼上各位朋友的提醒,问题已经解决.
//convert.h
extern "C" void testPrint();
//convert.cpp
#include <stdio.h>
#include "convert.h"
void testPrint()
{
printf("Enter testPrint\n");
}
//test.c
#include <stdio.h>
#include <windows.h>
//#include "convert.h" //引用该头文件会出错!!!
extern void testPrint();
int main()
{
testPrint();
system ("pause");
return 0;
}
#1
//调用该函数,提示错误如下:
//error LNK2001: unresolved external symbol _testPrinttestPrint();
//error LNK2001: unresolved external symbol _testPrinttestPrint();
#2
cpp 头文件声明该函数的时候用 extern "c" 修饰
#3
//convert.cpp
#include <stdio.h>
#include "convert.h"//去掉这里的看看
void testPrint()
{
printf("Enter testPrint\n");
}
#4
把CPP源码相关的所有内容编译成LIB或者DLL。
然后头文件中的接口使用:extern "C" { /* 这里写声明 */ } 包围起来。
之后链接即可。
然后头文件中的接口使用:extern "C" { /* 这里写声明 */ } 包围起来。
之后链接即可。
#5
在C中引用C++语言中的函数和变量时,C++的头文件需添加extern "C",但是在C语言中不能直接引用声明了extern "C"的该头文件,应该仅将C文件中将C++中定义的extern "C"函数声明为extern类型。
如:
//C++头文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern "C" int add( int x, int y );
#endif
//C++实现文件 cppExample.cpp
#include "cppExample.h"
int add( int x, int y )
{
return x + y;
}
/* C实现文件 cFile.c
/* 这样会编译出错:#include "cExample.h" */
extern int add( int x, int y );
int main( int argc, char* argv[] )
{
add( 2, 3 );
return 0;
}
如:
//C++头文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern "C" int add( int x, int y );
#endif
//C++实现文件 cppExample.cpp
#include "cppExample.h"
int add( int x, int y )
{
return x + y;
}
/* C实现文件 cFile.c
/* 这样会编译出错:#include "cExample.h" */
extern int add( int x, int y );
int main( int argc, char* argv[] )
{
add( 2, 3 );
return 0;
}
#6
这里extern "C"用不起来
error C2059: syntax error : 'string'
//convert.h
extern "C" void testPrint();
error C2059: syntax error : 'string'
#7
因为工程中.C文件和.CPP文件代码比较多,
所以想能不封装成DLL的话,尽量不封装.
如果不封装DLL的话,这个问题不知道是否好解决...
所以想能不封装成DLL的话,尽量不封装.
如果不封装DLL的话,这个问题不知道是否好解决...
#8
这三个文件,是新建一个 空的控制台程序,
然后又加入的.
然后又加入的.
#9
可以生成静态lib。
在.c文件中 引用头文件处用extern "c"包起来。
#10
++
#11
谢谢楼上各位朋友的提醒,问题已经解决.
//convert.h
extern "C" void testPrint();
//convert.cpp
#include <stdio.h>
#include "convert.h"
void testPrint()
{
printf("Enter testPrint\n");
}
//test.c
#include <stdio.h>
#include <windows.h>
//#include "convert.h" //引用该头文件会出错!!!
extern void testPrint();
int main()
{
testPrint();
system ("pause");
return 0;
}