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

标签 c++ mysql visual-studio linker mysql-connector

所以,我又来了,伙计们。经过一整天试图找出链接 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/

相关文章:

java - 什么情况下我们需要在数据库中使用组合键

c++ - int 到 unsigned char* 反之亦然

visual-studio - 更新 nuget 包将错误条件添加到 csproj

c++ - QLibrary 解析返回 false

c++ - NetBeans 有 C 自动注释吗?

mysql - 条件SQL查询协助

javascript - 使用 HTML5、JS、PHP 上传后将图像路径存储到 MySQL 数据库

c++ - Windows 上的 CMake

c++ - 当 C++ 中的 I2C 值更改时收到通知

windows - 如何让输出显示在 Visual Studio 2005 错误列表的消息 Pane 中?