我无法编译它,我不得不四处移动文件以将它们包含在内。
编译.SH
#!/bin/bash
i586-mingw32msvc-g++ -o widget.exe main.cpp -I /usr/include/boost/ -L /usr/lib/x86_64-linux-gnu/libmysqlclient.so
错误
/tmp/cci9fwk8.o:main.cpp:(.text+0x526): undefined reference to `__imp___ZN3sql5mysql19get_driver_instanceEv'
collect2: ld returned 1 exit status
我找到了 10 多个指南,我完全按照它们进行操作,安装了所有依赖项,添加了 mysqlclient 等,但没有任何效果。
MAIN.CPP(只是一部分,不需要其余代码)
#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
#include <cstdio>
#include <windows.h>
#include <fstream>
#include <stdio.h>
#include <direct.h>
#include "/usr/include/cppconn/mysql_connection.h"
#include "/usr/include/cppconn/mysql_driver.h"
#include </usr/include/cppconn/cppconn/driver.h>
#include </usr/include/cppconn/cppconn/exception.h>
#include </usr/include/cppconn/cppconn/resultset.h>
#include </usr/include/cppconn/cppconn/statement.h>
using namespace std;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res;
sql::mysql::MySQL_Driver *driver;
driver = sql::mysql::get_driver_instance();
con = driver->connect("", "", "");
con->setSchema("");
ldd/usr/lib/x86_64-linux-gnu/libmysqlclient.so
linux-vdso.so.1 => (0x00007fff21eba000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb027f52000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb027d3b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb027b36000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb02792e000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb027627000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb0273a4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb02718e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb026e03000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb0286c0000)
最佳答案
通常,错误如下:
undefined reference to `__imp___ZN3sql5mysql19get_driver_instanceEv'
发生在:
- 没有实现的方法
- 你有两个或更多版本的库
- header 在版本 x 中,源代码在版本 y 中。
告诉你该怎么做 如果你没有一些 linux 技能,那会有点困难...也许 mysql 使用不同版本的 libboost,我不确定。
尝试:
ldd /usr/lib/x86_64-linux-gnu/libmysqlclient.so
这向您展示了 libmysqlclient.so 需要哪些库
如果有很多依赖,你可以:
ldd /usr/lib/x86_64-linux-gnu/libmysqlclient.so | grep boost
并检查 boost 版本是否相同:
cat /usr/include/boost/version.hpp | grep "BOOST_LIB_VERSION"
编辑:
顺便说一句,我建议你编译:
-I /usr/include -L /usr/lib -lcppconn
这可能不是必需的,但可以肯定的是。然后以这种方式包含在 main 中:
#include <cppconn/mysql_connection.h>
#include <cppconn/mysql_driver.h>
#include <cppconn/cppconn/driver.h>
#include <cppconn/cppconn/exception.h>
#include <cppconn/cppconn/resultset.h>
#include <cppconn/cppconn/statement.h>
全部用<>,而不用“.”
关于c++ - 使用 MINGW32 在 Debian 上用 C++ 和 MySQL 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24912059/