gpt4 book ai didi

c++ - MySQL 连接器问题 - 链接甚至更多

转载 作者:可可西里 更新时间:2023-11-01 07:37:40 25 4
gpt4 key购买 nike

所以,我又来了,伙计们。经过一整天试图找出链接 libmysql.lib 和 mysqlclient.lib 的解决方案后,我彻底完成了。所以,在那里,我决定采取另一种方式,使用方便的 MySQL 连接器。

由于它的 1.1.0 版本使用了 boost,而我没有可用的,也不想花时间去弄清楚一切,我决定下载 1.0.5。

所以,我安装了它,创建了新项目,链接了所有必要的库,设置了额外的库和包含(嗯,通常,按照 this 手册完成所有操作。为了测试它是否正常工作,我使用了这样的示例:

#include <stdlib.h>
#include <iostream>

#include "driver.h"
#include "exception.h"
#include "resultset.h"
#include "statement.h"
#include "prepared_statement.h"

int main(){

sql::Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res;
sql::PreparedStatement *pstmt;

try{
driver = get_driver_instance();
con = driver->connect("localhost", "root", "root");
con->setSchema("test");

/*blah blah yada yada*/

}catch(sql::SQLException &e){
std::cout<<e.what();
}
}

我跳过了部分代码,因为这不是重点。所以,这个问题是应用程序错误告诉无法正确启动(0xc000007b)。调试并没有太大帮助,因为这个错误在程序运行时就发生了,即即使我在开始时设置了无限循环,它仍然会崩溃。

所以,我想:“这应该是这个版本的一些错误,所以我必须尝试更新一个”。在此之后,我继续下载了 1.1.0 版的连接器以及 boost 库。比创建新项目,像第一个一样设置所有依赖项,但指向较新版本的连接器。除此之外,我设置了新的引用 mysqlcppconn_EXPORTS。因此,准备工作已经完成,出于测试目的,我使用了 MySQL site 中的代码,嗯,一般来说,是这样的:

/*tons of includes here*/

int main(int argc, const char *argv[]) {

Driver *driver;
Connection *con;
Statement *stmt;
ResultSet *res;
PreparedStatement *prep_stmt;
Savepoint *savept;

int updatecount = 0;

/* initiate url, user, password and database variables */
string url(argc >= 2 ? argv[1] : DBHOST);
const string user(argc >= 3 ? argv[2] : USER);
const string password(argc >= 4 ? argv[3] : PASSWORD);
const string database(argc >= 5 ? argv[4] : DATABASE);

try {
driver = get_driver_instance();

/*blah blah yada yada*/

} catch (std::runtime_error &e) {

cout << "ERROR: runtime_error in " << __FILE__;
//cout << " (" << __func__ << ") on line " << __LINE__ << endl;
cout << "ERROR: " << e.what() << endl;

return EXIT_FAILURE;
}

return EXIT_SUCCESS;
} // main()

你猜怎么着?是的,这里又出现了链接器错误:

error LNK2001: unresolved external symbol _get_driver_instance

所以请任何人告诉我我做错了什么?将不胜感激。

我会明确说明并用粗体字写出来,这样就不会有任何答案了。我已经明确设置了 Preferences -> C/C++ -> General -> Additional Include Directories 以及 Preferences -> Linker -> General -> Additional Library Directories。

另外,我已将 mysqlcppconn.lib 放入 Preferences -> Linker -> Additional Dependencies。

此外,我已将 mysqlcppconn.dlllibmysql.dll(是的,来自各自的 C++ 连接器版本)放入我的项目文件夹中,不要有问题。

哦,是的,我在预处理器定义中尝试了使用和不使用 CPPCONN_PUBLIC_FUNC= 键 - 没有发生任何变化。

正如我所说 - 具有相同的项目偏好,1.0.5 版连接器在构建阶段失败,而 1.1.0 版 - 在编译阶段失败。

附言我正在使用 VS 2010,我的操作系统 - Windows 7 x64。项目和库都是 x32。

最佳答案

我遇到了同样的问题“无法正确启动 (0xc000007b)”。问题是我没有使用正确的 DLL(使用 x86 而不是 x64),即使我已经安装(并重新安装)了 64 位的 mysql。

我已将 PATH 变量“C:\MySQL\Connector C++ 1.1.3\lib\opt”添加到 mysqlcppconn.dll(用于 x64)所在的位置。尽管如此,在我的 PATH 中还有另一个目录(lua 安装),其中包含 mysqlcppconn.dll(对于 x86)。由于 x86 目录是在 MySQL 目录之前设置的,因此 x86 dll 已加载,因此“无法启动 ...”

为了避免这种情况,我已将 mysqlcppconn.dll 复制到我的项目调试目录中。

关于c++ - MySQL 连接器问题 - 链接甚至更多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12402891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com