所以,我又来了。经过一整天的尝试来找到链接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.dlllibmysql.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复制到了我的项目调试目录中。

10-04 20:21