C ++ / MySQL连接 - 未定义参考get_driver_instance - 已经尝试过

2019-08-22 21:35发布

是的,这问题已经被问过...我已经试过在前面的答案中提到的一切。 我的设置是真的直截了当所以这不应该是这么难。

我只是想用C ++对MySQL的编程。 我的源代码是采取verbatem从这里的“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的命名空间等等。我敢肯定的源代码是好的。 再次,它编译,并在源代码中改变命名空间只是似乎使情况变得更糟。

预先感谢您的帮助,您可以提供。

Answer 1:

所以,现在我现在已经没有这个问题了一个星期,我变得非常沮丧它。 我刚才是能够最终建立一个程序,什么也不做,除了登录到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;
}

最后克++编译命令:

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

这为我工作,我希望它可以帮助您解决问题!



Answer 2:

对我来说,简单地交换解决了这个问题的最后两个参数的顺序。 我不知道为什么,但链接器能够找到功能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


Answer 3:

如果你是和我一样健忘和的CMakeLists.txt没有链接库:

target_link_libraries(<target> mysqlcppconn)


Answer 4:

如果所有路径都包含扔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

就这些!! 原因很简单。 你可以找出使用网络或问我来阐述。



文章来源: C++ / mysql Connector - undefined reference to get_driver_instance - already tried the easy stuff