首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用交叉编译器和VisualGDB时对mysql的未定义引用

使用交叉编译器和VisualGDB时对mysql的未定义引用
EN

Stack Overflow用户
提问于 2016-02-26 06:39:40
回答 3查看 1.1K关注 0票数 1

我试图用C++和交叉编译器为Raspberry编译简单的VisualGDB程序。我已经完成了http://visualgdb.com/tutorials/raspberry/wiringPi/教程中的所有操作,并成功地运行了示例闪烁引导应用程序,因此一切似乎都配置好了。

现在,我想添加一些mysql支持来记录更改,并阅读一些配置信息。

代码语言:javascript
复制
#include <wiringPi.h>
#include <mysql/mysql.h>

int main(int argc, char *argv[])
{
    wiringPiSetup();

    MYSQL *mysql1 = mysql_init(NULL);


}

不幸的是,我错了:

代码语言:javascript
复制
'NULL' was not declared in this scope

我试着把

代码语言:javascript
复制
#include <mysql/my_global.h>

标头,因此NULL不再是未声明的,但另一个错误显示:

代码语言:javascript
复制
error VGDB1000: undefined reference to `mysql_init'

我做错什么了?

编辑

添加了我设置的屏幕截图。我不太了解gcc .也许这就是我使用VisualGDB的原因;)

我尝试将此添加到LDFLAGS:

代码语言:javascript
复制
`mysql_config --cflags` `mysql_config --libs`

但我得到了一个错误:

代码语言:javascript
复制
Tool arguments: -Wl,--start-group "C:\Users\Marek\AppData\Local\Temp\/VisualGDB_ToolchainTestProgram.o" -o "C:\Users\Marek\AppData\Local\Temp\/VisualGDB_ToolchainTestProgram" -Wl,-gc-sections `mysql_config --cflags` `mysql_config --libs` -lpthread -lwiringPi -Wl,--end-group
arm-linux-gnueabihf-gcc.exe: error: `mysql_config: No such file or directory
arm-linux-gnueabihf-gcc.exe: error: `mysql_config: No such file or directory
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-26 14:10:30

好吧,我设法解决了问题。我在这里发现了非常有用的提示:https://sysprogs.com/w/forums/topic/include-mysqlmysql-h-errorundefined-reference-to/

您需要将MySQL库添加到VisualGDB项目属性中的“库”设置中。指定没有‘lib’前缀和‘.a’后缀的名称。例如,如果库名为libmysql.a,只需在“库”字段中指定“mysql”即可。如果包含文件不包含,还可能需要在包含文件周围放置extern“C”。

我尝试将"mysql“添加到库名称部分,但正确的名称是mysqlclient

没有必要使用extern或添加LDFLAGS。

因此,每当您想要添加新库时,请检查库目录中是否有正确的文件。

谢谢你的评论,他们告诉我这个解决方案。

票数 2
EN

Stack Overflow用户

发布于 2020-02-09 22:23:32

我很抱歉对此作了额外的回答,但我不能评论,因为缺乏声誉.

马克的回答是正确的,让我明白了这一点。但是,当使用CMake而不是Makefile创建项目时,“库名”选项不会出现在VisualGDB设置中。

然后,您应该转到包含项目的实际代码的“属性”,转到“导出设置”=>“公共”=>“附加库”。在这里,正如Mark指出的,您可以填写库的名称,而不需要添加任何内容。

我不确定这是否与Mark添加它们的方式完全相同,但它在VS2019上适用于我。

票数 1
EN

Stack Overflow用户

发布于 2016-02-26 10:44:31

NULL是用stdio.h定义的,所以您只需要

代码语言:javascript
复制
#include <stdio.h>

代码语言:javascript
复制
#include <iostream>

或者自己定义:

代码语言:javascript
复制
#define NULL 0 

关于undefined reference to 'mysql_init',它不是由定义NULL引起的。

此错误来自链接步骤,因此它意味着当您使NULL有效(这是编译步骤引起的错误)时,将显示来自链接步骤的错误。

仔细检查头文件中mysql_init的定义。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35645146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档