我已经在这里搜索了所有问题,试图找到一个解决方案而且它没有发生。
1>MySQLTest.obj : error LNK2019: unresolved external symbol __imp__get_driver_instance referenced in function _main
我知道这是一个链接器错误。所以我修改了VS2010中的include和library目录选项,指向MySQL Server库和Connection ++库
库:
C:\Programming\boost_1_55_0\stage\lib
C:\Program Files\MySQL\Connector C++ 1.1.3\lib
C:\Program Files\MySQL\MySQL Server 5.6\lib
包括:
C:\Programming\boost_1_55_0
C:\Program Files\MySQL\Connector C++ 1.1.3\include
C:\Program Files\MySQL\Connector C++ 1.1.3\include\cppconn
我在另一个线程中读到get_driver_instance函数仅在动态加载库时才可用。它说要定义mysqlcppconn_EXPORTS。
get_driver_instance()现在仅在动态库构建中可用 - 静态构建没有此符号。这样做是为了适应装载 DLL与LoadLibrary或dlopen。如果你不使用CMake 用于构建源代码,您需要定义 mysqlcppconn_EXPORTS如果您正在动态加载并想要使用 get_driver_instance()入口点。
我定义了这个但它仍然不起作用。还有另一个定义(CPPCONN_PUBLIC_FUNC),如果我想静态链接,人们会说。我也尝试了这个,但我仍然遇到了这个错误。最好我想静态链接所有内容,并尽可能使用不同的方式访问驱动程序。除了get_driver_instance()之外还有其他方法吗?
注意:SQLString工作正常。所以我正确地链接某些事情。我只是不知道为什么这个函数错误了。
我安装了64位版本的连接器。与mysql Server和workbench一起使用。
以下是我尝试运行的代码:
#include "stdafx.h"
//#define CPPCONN_PUBLIC_FUNC
/* Standard C++ headers */
#include <iostream>
#include <sstream>
#include <memory>
#include <string>
#include <stdexcept>
#include <Windows.h>
/* MySQL Connector/C++ specific headers */
#include <mysql_driver.h>
#include <mysql_connection.h>
#include <statement.h>
#include <prepared_statement.h>
#include <resultset.h>
#include <metadata.h>
#include <resultset_metadata.h>
#include <exception.h>
#include <warning.h>
using namespace std;
using namespace sql;
int main(int argc, _TCHAR* argv[])
{
sql::mysql::MySQL_Driver *driver;
Connection *con;
/* initiate url, user, password and database variables */
const sql::SQLString url = "tcp://127.0.0.1:3306";
const sql::SQLString user = "root";
const sql::SQLString password = "admin";
const sql::SQLString database = "store";
driver = sql::mysql::get_mysql_driver_instance();
/* create a database connection using the Driver */
con = driver->connect(url, user, password);
system("PAUSE");
return 0;
}
答案 0 :(得分:1)
我的一个假设中出现了轻微的错误。我认为visual studio默认基于你运行的系统进行构建。它正在构建一个32位版本的应用程序(在64位机器上),我正在使用64位库。如果这样做,链接器将不会查看使用64位目标编译的库。
在以下区域中必须将机器类型更改为64位才能使我的构建正常工作:
项目 - &gt; “project_name”属性 - &gt; 链接器 - &gt; 高级 - &gt; 目标计算机设置为“x64”
可能还有另一个必须更改的属性是相关的(确保它的构建为64位),但我不记得它在哪里。我记得很难找到它。
答案 1 :(得分:1)
我通过从MySQL网站下载C ++连接器和从dllfiles.com下载libmysql.dll 32位解决了这个问题
注意:MySQL Installer是32位,但将根据您的计算机平台安装32位和64位二进制文件。我使用的是Win8 64位和VS2010 32位,我的目标平台是32位。但是MySQL提供的连接器是64位,因此会导致无法解决的符号问题。
所以你必须下载一个独立的32位连接器并使用其中的lib。此外,您必须下载libmySQL.dll 32位