undefined reference to `mysql_init‘

在这里插入图片描述

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

Undefined reference to 错误:这类错误是在连接过程中出现的,可能有两种原因∶

一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这 需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;

  1. 可以头文件中类加上

#ifndef xxx_H
  #define xxx_H

namespace xxx{undefined

};

#endif

cpp文件中包含头文件,using namespace xxx; 或者 其他访问方式(自行百度namepace 使用方法)

2)若全局 namespace xxx 被class xxx 覆盖,请加上::

  1. 请注意原来的makefile文件是否包含新增的文件,并且逻辑包含关系正确。

二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有 给定相应的函数库的名称,或者是该档案库的目录名称有问题.

在使用厂商新提供的库文件时,遇到了新问题,库中的函数程序不识别,同样的方法在使用以前的库时是可行的,在CSDN上求助并查阅一些资料后,问题已经解决。
1)使用库的时候首先要明确库(或者头文件)是用什么编写的,如果是用C++编写的,那么在MFC中可以直接使用,如果是用c编写的,那么在#include头文件的时候要加上
extern “C”{undefined
#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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
undefined reference to shm_init'错误是由于编译器无法找到对应的库函数shm_init引起的。要解决这个问题,可以尝试以下几个步骤: 1. 确保你的代码中包含了正确的头文件,即包含shm_init函数的头文件。 2. 检查你的代码是否正确地链接了对应的库文件。你可以使用-l参数来链接库文件,比如-lpthread用于链接pthread库。在编译时,确保加上正确的链接参数。 3. 确保你的系统上已经安装了包含shm_init函数的库文件。如果没有安装,可以尝试安装相关的开发包。 总结起来,要解决undefined reference to shm_init'错误,你需要确认代码包含正确的头文件,正确地链接库文件,并确保相关的库文件已经安装在系统中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Linux C语言编译报错:undefined reference to `sem_init‘(编译时加 -lpthread)](https://blog.csdn.net/Dontla/article/details/126366430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [linux下编译c代码时error:undefined reference to sem_init sem_wait 解决方法之一](https://blog.csdn.net/loosen17/article/details/50524743)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值