C++程序中出现undefined reference to ......

   在C++代码中调用C的库文件,需加上extern "C",用来告知编译器:这是一个用C写成的库文件,请用C的方式连接他们。

Undefined reference to 错误:这类错误是在连接过程中出现的,可能有两种原因∶一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题.

   在使用厂商新提供的库文件时,遇到了新问题,库中的函数程序不识别,同样的方法在使用以前的库时是可行的,在CSDN上求助并查阅一些资料后,问题已经解决。
1)使用库的时候首先要明确库(或者头文件)是用什么编写的,如果是用C++编写的,那么在MFC中可以直接使用,如果是用c编写的,那么在#include头文件的时候要加上
extern “C”{
#include “OOXX.h”
}
注意格式换行要正确。
2)为什么要如1)中那样操作呢,因为在c++中编译的方法和c不用,这是由于函数的重载造成的。在c中不涉及重载,如函数func(int a,float b)编译成_func.在c++中涉及重载,如果只凭函数名是不足以判断是使用的哪个函数,所以编译的时候要加上变量,如函数func(int a,float b)编译成_func_int_float,这样不但确定了函数名,还确定了使用哪中重载。正式由于以上的不同,使得c中编的函数不能在c++中直接使用,c++中为了兼容c的代码,提出了extern “C”的方法,在编译声明了extern “C”的函数函数时,会按照c语言的方法编译。
如果不加extern “C”,在编译的时候会出现link错误:error link 2001:unresolved extern symbol “long __stdcall func(int a,float b)@QDASCFQAE@”之类的错误,说明编译器没有识别出函数func

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值