链接器错误与get_driver_instance()MySQL C ++ VS2010

时间:2013-11-21 19:00:05

标签: c++ mysql visual-studio-2010 linker-errors

我已经在这里搜索了所有问题,试图找到一个解决方案而且它没有发生。

错误

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;
}

2 个答案:

答案 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位