get_driver_instance()MySQL C++VS2010的链接器错误
Linker error with get_driver_instance() MySQL C++ VS2010
我已经搜索了这里的所有问题,试图找到解决方案,但这并没有发生。
错误
1>MySQLTest.obj : error LNK2019: unresolved external symbol __imp__get_driver_instance referenced in function _main
我尝试过的
我知道这是一个链接器错误。因此,我修改了VS2010中的include和library目录选项,以指向MySQL Server库和Connection++库
库:
C:Programmingboost_1_55_0stagelib
C:Program FilesMySQLConnector C++ 1.1.3lib
C:Program FilesMySQLMySQL Server 5.6lib
包括:
C:Programmingboost_1_55_0
C:Program FilesMySQLConnector C++ 1.1.3include
C:Program FilesMySQLConnector C++ 1.1.3includecppconn
我在另一个线程中读到,get_driver_instance函数只有在动态加载库时才可用。它说要定义mysqlcppconnen_EXPORTS。
get_driver_instance()现在仅在动态库构建中可用-静态生成没有此符号。这样做是为了适应装载带有LoadLibrary或dlopen的DLL。如果不使用CMake为了构建源代码,您需要定义如果您正在动态加载并希望使用get_driver_instance()入口点。
我定义了这个,但它仍然不起作用。如果我想静态链接,人们说要使用另一个定义(CPPCONN_PUBLIC_FUNC)。我也试过了,但还是会出错。最好我只想静态链接所有内容,并在可能的情况下使用不同的方式访问驱动程序。除了get_driver_instance(),还有其他方法吗?
注意:SQLString运行良好。所以我把某些事情恰当地联系起来了。我只是不知道为什么这个函数会出错。
我安装了64位版本的连接器。以及mysql服务器和工作台。
这是我试图运行的代码:
#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;
}
我的一个假设出现了一个小错误。我假设visualstudio默认基于您正在运行的系统进行构建。它构建了一个32位版本的应用程序(在64位机器上),我使用的是64位库。如果这样做,链接器将不会查看使用64位目标编译的库。
机器类型必须在以下区域更改为64位才能使我的构建正常工作:
项目 "项目名称"属性->链接器->高级>目标机器设置为"x64"
可能还有另一个属性必须更改(确保其构建为64位),但我记不清它在哪里了。我记得这是很明显的发现。
我通过从MySQL网站下载C++连接器和从dllfiles.com 下载libmysql.dll 32位来解决这个问题
注意:MySQL安装程序是32位的,但将根据您计算机的平台安装32位和64位二进制文件。我使用的是Win8 64位和VS2010 32位,我的目标平台是32位。但是MySQL提供的连接器是64位的,所以会导致无法解决的符号问题。
所以你必须下载一个独立的32位连接器并使用其中的lib。此外,你必须下载libmySQL.dll 32位
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误