C ++ / mysql连接器 - 对get_driver_instance的未定义引用 - 已经尝试过简单的东西

时间:2013-04-14 03:01:56

标签: c++ mysql ubuntu-12.10

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

我只想用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'就是我命名的源代码文件,再次从官方示例中获取verbatem
  • 正如您所见,我在 mysqlclient 库和 mysqlcppconn 库中进行链接。很多时候,当先问过这个问题时,答案是将这些问题联系起来。
  • 其他一些历史答案表明示例源代码是错误的,并且有问题的函数需要在sql :: mysql命名空间等。我很确定源代码很好。同样,它编译,并且更改源代码中的命名空间似乎使它变得更糟。

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

4 个答案:

答案 0 :(得分:28)

所以我现在已经有这个问题一个星期了,我也对此感到非常沮丧。我刚才能够最终构建一个除了登录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

这对我有用,我希望它能帮助你解决问题!

答案 1 :(得分: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

答案 2 :(得分:5)

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

target_link_libraries(<target> mysqlcppconn)

答案 3 :(得分:2)

如果包含所有路径,则抛出param -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

现在您必须调整-lmysqlcppconnmain.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

这就是全部!! 原因很简单。你可以找到使用网络或要求我详细说明。