gpt4 book ai didi

c++ - centos 6 中的 mysql 连接器 cpp undefined reference

转载 作者:行者123 更新时间:2023-11-28 23:12:27 24 4
gpt4 key购买 nike

我已经安装了 mysql cpp connectorBoost 以及 g++ 编译器。

当我编写一个使用 mysql cpp 连接器 的程序时,出现错误:

demo.cpp:(.text+0x3a): undefined reference to 'get_driver_instance'
collect2: ld returned 1 exit status

我用来构建这段代码的命令是:

g++ demo.cpp -o demo

我的源代码是:

#include <stdlib.h>
#include <iostream>
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

using namespace std;

int main(void)
{
cout << endl;
cout << "Running 'SELECT 'Hello World!' AS _message'..." << endl;

try {
sql::Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res;

/* Create a connection */
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
/* Connect to the MySQL test database */
con->setSchema("test");

stmt = con->createStatement();
res = stmt->executeQuery("SELECT 'Hello World!' AS _message"); // replace with your statement
while (res->next()) {
cout << "\t... MySQL replies: ";
/* Access column data by alias or column name */
cout << res->getString("_message") << endl;
cout << "\t... MySQL says it again: ";
/* Access column fata by numeric offset, 1 is the first column */
cout << res->getString(1) << endl;
}
delete res;
delete stmt;
delete con;
}
catch (sql::SQLException &e) {
cout << "# ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

cout << endl;

return EXIT_SUCCESS;
}

任何人都可以提出一些解决方案吗?
我已经尝试了很多东西,但都没有用。
我需要重新安装所有东西吗?

我已经关注了

MySQL-connector installation steps

如 MySQL 的帮助中所述。

最佳答案

您当前的构建命令:g++ demo.cpp -o demo 不包含链接器 ld 的信息,应该链接哪些库。因此,您会收到链接器错误:

demo.cpp:(.text+0x3a): undefined reference to 'get_driver_instance'
collect2: ld returned 1 exit status

this documentation写了需要哪些库。

您可以静态或动态链接。
静态链接 意味着您的可执行文件将在没有安装所需库的机器上运行,因为这些库位于可执行文件中。这也使可执行文件的大小更大。对于 MySQL 连接器/C++,库是:libmysqlcppconn-static.alibmysqlclient.a
动态链接 意味着您的可执行文件将需要在它应该运行的机器上找到库。所需的库是:libmysqlcppconn.so

使用动态链接(使用libmysqlcppconn.so)的构建命令应该如下所示:

g++ demo.cpp -o demo -lmysqlcppconn

进一步注意 -l-L 之间的区别,如 here on SOhere in the official gcc linker documentation :

-L is the path to the directories containing the libraries. A search path for libraries.

-l is the name of the library you want to link to.

这里不需要路径 (-L),因为库应该位于 /usr/local/lib 下,这是默认安装并且已经在搜索中链接器的路径。

关于c++ - centos 6 中的 mysql 连接器 cpp undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45325562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com