所以,我又来了,伙计们。经过一整天试图找出链接 libmysql.lib 和 mysqlclient.lib 的解决方案后,我彻底完成了。所以,在那里,我决定采取另一种方式,使用方便的 MySQL 连接器。
由于它的 1.1.0 版本使用了 boost,而我没有它,也不想花时间去弄清楚一切,我决定下载 1.0.5。
所以,我安装了它,创建了新项目,链接了所有必要的库,设置了额外的库和包含(嗯,通常,根据本手册完成所有事情。为了测试它是否正常工作,我使用了这样的示例:
#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 站点的代码,一般来说,是这样的:
/*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.dll
and libmysql.dll
(是的,来自各自的 C++ 连接器版本)放入我的项目文件夹中,对此没有任何问题。
哦,是的,我CPPCONN_PUBLIC_FUNC=
在预处理器定义中尝试了使用和不使用键 - 没有发生任何变化。
正如我所说的那样 - 在相同的项目偏好下,连接器的 1.0.5 版本在构建阶段失败,而 1.1.0 版本在编译阶段失败。
ps 我正在使用 VS 2010,我的操作系统 - Windows 7 x64。项目和库都是 x32。