【问题标题】:Compile with C++ & MySQL on Debian using MINGW32使用 MINGW32 在 Debian 上使用 C++ 和 MySQL 进行编译
【发布时间】:2014-07-23 13:40:35
【问题描述】:

我无法编译它,我不得不在文件中移动以将它们包含在内。

编译.SH

#!/bin/bash
i586-mingw32msvc-g++ -o widget.exe main.cpp -I /usr/include/boost/ -L /usr/lib/x86_64-linux-gnu/libmysqlclient.so

错误

/tmp/cci9fwk8.o:main.cpp:(.text+0x526): undefined reference to `__imp___ZN3sql5mysql19get_driver_instanceEv'
collect2: ld returned 1 exit status

我找到了 10 多个指南,我完全按照它们进行操作,安装所有依赖项,添加 mysqlclient 等,但没有任何效果。

MAIN.CPP(只是一部分,不需要其他代码)

    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <cstdio>
    #include <windows.h>
    #include <fstream>
    #include <stdio.h>
    #include <direct.h>
    #include "/usr/include/cppconn/mysql_connection.h"
    #include "/usr/include/cppconn/mysql_driver.h"
    #include </usr/include/cppconn/cppconn/driver.h>
    #include </usr/include/cppconn/cppconn/exception.h>
    #include </usr/include/cppconn/cppconn/resultset.h>
    #include </usr/include/cppconn/cppconn/statement.h>
    using namespace std;


    sql::Connection *con;
    sql::Statement *stmt;
    sql::ResultSet *res;
    sql::mysql::MySQL_Driver *driver;
    driver = sql::mysql::get_driver_instance();
    con = driver->connect("", "", "");
    con->setSchema("");

ldd /usr/lib/x86_64-linux-gnu/libmysqlclient.so

   linux-vdso.so.1 =>  (0x00007fff21eba000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb027f52000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb027d3b000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb027b36000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb02792e000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb027627000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb0273a4000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb02718e000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb026e03000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fb0286c0000)

【问题讨论】:

  • 您尝试在.so 文件中链接似乎很奇怪。尝试链接等效命名的 .a 文件
  • 刚刚试了一下,和.so文件一样的错误。
  • 一些指南指出我必须静态链接 mysqlcppconn,但在我的系统上找不到此文件。我已经安装了所有软件包。
  • 是否有可能包含不同版本的源代码
  • 不幸的是,我不是这类事情的专家。我的 Windows PC 上有 mingw32,但我得到了同样的错误。

标签: c++ mysql linux bash mingw32


【解决方案1】:

通常,错误如下:

undefined reference to `__imp___ZN3sql5mysql19get_driver_instanceEv'

发生在:

  • 没有实现的方法
  • 您有两个或更多版本的库
  • 标头在版本 x 中,源在版本 y 中。

告诉你该怎么做,如果你没有一些 linux 技能,这有点困难......也许 mysql 使用不同版本的 libboost,我不确定。

试试:

ldd /usr/lib/x86_64-linux-gnu/libmysqlclient.so

这会告诉你 libmysqlclient.so 需要哪些库

如果有很多依赖,你可以:

ldd /usr/lib/x86_64-linux-gnu/libmysqlclient.so | grep boost

并检查boost版本是否相同:

cat /usr/include/boost/version.hpp | grep "BOOST_LIB_VERSION"

编辑:

顺便建议你编译一下:

-I /usr/include -L /usr/lib -lcppconn

这可能不是必需的,但可以肯定。然后以这种方式包含在main中:

#include <cppconn/mysql_connection.h>
#include <cppconn/mysql_driver.h>
#include <cppconn/cppconn/driver.h>
#include <cppconn/cppconn/exception.h>
#include <cppconn/cppconn/resultset.h>
#include <cppconn/cppconn/statement.h>

全部带,不带“”。

【讨论】:

  • 那么你可以建议我做什么?我坐在黑暗中,已经有一段时间了。
  • 第一个命令的输出被添加到主帖的底部。第二个命令根本不返回任何内容。我对 Linux 有足够的经验,只是没有解决依赖关系之类的问题。
  • 没关系,mysql lib不要用boost...嗯..让我想想
  • #define BOOST_LIB_VERSION "1_49"
  • 如果我这样做,它会编译 /usr/include 中的所有文件,哈哈!即:/usr/include/stdlib.h:488:错误:'__THROW'之前的预期初始化程序
猜你喜欢
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多