22

是的,这个问题之前已经被问过......我已经尝试了前面答案中提到的所有内容。我的设置非常简单,所以这不应该那么难。

我只想使用 C++ 对 mysql 进行编程。我的源代码是从这里的“hello world”类型示例中逐字提取的:

http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-examples-complete-example-1.html

我在 Ubuntu 12.10 上。我在尝试:

g++ -Wall -o firsttry_prog -I/usr/include/mysqlcppconn -I/usr/local/boost_1_53_0  -L/usr/lib/x86_64-linux-gnu -l:libmysqlclient_r.so.18 -L/usr/lib/mysqlcppconn -lmysqlcppconn  firsttry.cpp

它编译(如果我使用 -c 选项)但不会编译,这给了我臭名昭著的:

/tmp/ccn768hj.o: In function `main':
firsttry.cpp:(.text+0x3a): undefined reference to `get_driver_instance'

一些细节:

  • 'firsttry.cpp'就是我对源代码文件的命名,再次逐字逐句取自官方示例
  • 如您所见,我正在链接mysqlclient库和mysqlcppconn库。以前多次问过这个问题时,答案是把它们联系起来。
  • 其他一些历史答案表明示例源代码是错误的,并且有问题的函数需要位于 sql::mysql 命名空间等中。我很确定源代码是好的。同样,它可以编译,并且更改源代码中的命名空间似乎会使情况变得更糟。

提前感谢您提供的任何帮助。

4

4 回答 4

31

所以我现在这个问题已经有一个星期了,我也对此感到非常沮丧。我刚刚终于能够构建一个除了登录 mysql 之外什么都不做的程序,我真的高兴得尖叫起来。这是我所拥有的,我希望它有所帮助。

我首先从源代码编译了 c++ 连接器库,但过了一段时间我想也许我做错了什么,所以我只是使用 apt 来获取它:

sudo apt-get install  libmysqlcppconn-dev

这是我的简单测试源文件“tester.cpp”

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

using namespace sql;
int main(void){
  sql::Driver *driver;
  sql::Connection *con;

  driver = get_driver_instance();
  con = driver->connect("tcp://127.0.0.1:3306","root","YOURPASSWORD");

  return 0;
}

最后是 g++ 编译命令:

sudo g++ -Wall -I/usr/include/cppconn -o testapp tester.cpp -L/usr/lib -lmysqlcppconn

这对我有用,我希望它可以帮助您解决问题!

于 2013-04-15T00:13:10.793 回答
9

对我来说,只需交换最后两个参数的顺序即可解决此问题。我不知道为什么,但是get_driver_instance如果我-lmysqlcppconn在源文件后面指定选项,链接器能够找到该函数。

g++ -Wall -o firsttry_prog -I/usr/include/mysqlcppconn -L/usr/lib/mysqlcppconn firsttry.cpp -lmysqlcppconn

另请注意,我删除了以下选项,因为我认为它们是多余的

-I/usr/local/boost_1_53_0  -L/usr/lib/x86_64-linux-gnu -l:libmysqlclient_r.so.18
于 2013-08-22T21:03:18.820 回答
7

如果你和我一样健忘并且没有在 CMakeLists.txt 中链接库:

target_link_libraries(<target> mysqlcppconn)
于 2015-10-17T01:40:41.803 回答
2

如果包含所有路径,则抛出参数 -I。如果你这样编译,你会看到是否有问题:

g++ -g  -o0  -I/usr/local/include -I/usr/local/boost/include -c main.cpp -o main.o
g++ -g  -o0 -L/usr/local/lib -L/usr/local/mysql/lib -lmysqlcppconn  main.o  -o test  

会出现问题:

main.o: In function `main':
/home/huangxw/workspace/public/soal/test/main.cpp:165: undefined reference to `get_driver_instance'
collect2: ld returned 1 exit status

现在您必须调整 和 的-lmysqlcppconn顺序main.o

g++ -g  -o0  -I/usr/local/include -I/usr/local/boost/include -c main.cpp -o main.o
g++ -g  -o0 -L/usr/local/lib -L/usr/local/mysql/lib main.o  -o test  -lmysqlcppconn

就这些!!原因很简单。您可以使用网络查找或要求我详细说明。

于 2013-11-12T09:11:07.893 回答