所以,我又来了。经过一整天的尝试来找到链接libmysql.lib和mysqlclient.lib的解决方案之后,我已经彻底完成。因此,在那里,我决定采用另一种方法并使用方便的MySQL连接器。
由于它的1.1.0版本使用了boost,而我没有提供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
所以,请任何人告诉我我在做什么错?将不胜感激。
我将明确声明它并以粗体显示,这样就不会有任何答案。我已经明确设置了首选项-> C/C++->常规->其他包含目录以及首选项->链接器->常规->其他库目录。
另外,我已经将
mysqlcppconn.lib
放入了Preferences-> Linker-> Additional Dependencies。 除此之外,我已经将
mysqlcppconn.dll
和libmysql.dll
(是的,来自各个C++连接器版本)放入我的项目文件夹,对此没有任何问题。 哦,是的,我在“预处理程序定义”中尝试了是否使用
CPPCONN_PUBLIC_FUNC=
键-没有发生任何更改。 就像我说的-在相同的项目首选项下,连接器1.0.5版在构建阶段失败,而1.1.0版在编译阶段失败。
ps我正在使用VS 2010,我的操作系统-Windows 7 x64。项目和库都是x32。
最佳答案
我遇到了同样的问题“无法正确启动(0xc000007b)”。问题是,即使我已经安装(并重新安装)了64位mysql,我也没有使用正确的DLL(使用x86而不是x64)。
我已经添加了mysqlcppconn.dll(用于x64)所在的PATH变量“C:\MySQL\Connector C++ 1.1.3\lib\opt”。不过,在我的PATH中,还有另一个目录(lua安装),它具有mysqlcppconn.dll(用于x86)。由于x86目录是在MySQL目录之前设置的,因此x86 dll已加载,因此“无法启动...”
为了避免这种情况,我将mysqlcppconn.dll复制到了我的项目调试目录中。