这个问题以前已经被问过了... 我尝试了之前回答中提到的所有方法。我的设置非常简单,所以这不应该很难。
我只想使用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 命名空间中等。我相信源代码是正确的。再次强调,它可以编译,而更改源代码中的命名空间似乎只会使情况变得更糟。
-l:libmysqlclient_r.so.18
是什么?不应该是-lmysqlclient_r
吗? - Alexander Shukaevfirsttry.cpp
编译为firsttry.o
,然后将其链接到那些 MySQL 库中以生成可执行文件。即像这样:g++ -Wall -I/usr/include/mysqlcppconn -I/usr/local/boost_1_53_0 -o firsttry.o firsttry.cpp
和g++ firsttry.o -L/usr/lib/x86_64-linux-gnu -l:libmysqlclient_r.so.18 -L/usr/lib/mysqlcppconn -lmysqlcppconn -o firsttry
。 - Alexander Shukaev/usr/lib/mysqlcppconn/libmysqlcppconn.so: undefined reference to mysql_stmt_execute@libmysqlclient_18'
等等,所有未定义的引用都在libmysqlcppconn中...为什么会这样呢? - Ray in NY-l:libmysqlclient_r.so.18 -lmysqlcppconn
。 - Alexander Shukaev