【问题标题】:Installing ODBC driver on Linux (Ubuntu) for Qt getting syntax error while running "make"在 Linux (Ubuntu) 上为 Qt 安装 ODBC 驱动程序在运行“make”时出现语法错误
【发布时间】:2017-05-17 20:22:39
【问题描述】:

我正在尝试在 Qt 中连接到 ubuntu 上的 SQL Server 数据库,并且需要安装 ODBC 驱动程序。 我做了文件告诉我要做的here。并将 unixOBDC 从 here 安装到 /usr/local/unixODBC 然后运行这些命令

cd ~/Qt5.7.0/5.7/Src/qtbase/src/plugins/sqldrivers/odbc
qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc"
make

这导致了几个来源中的语法错误

如果我现在运行我的代码,这就是我得到的结果

QSqlDatabase: QODBC driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7

我错过了什么?

编辑:

makeg++ -c -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -O2 -std=c++11 -fvisibility=hidden -fvisibility-inlines-hidden -std = C ++ 11 -fno-例外-Wall -W -Wvla -Wdate时间-D_REENTRANT -fPIC -DQT_NO_TSLIB -DUNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I。 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore/5.5.1 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore/5.5.1/QtCore -isystem /usr/include/x86_64 -linux-gnu/qt5/QtSql/5.5.1 -isystem /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtSql -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I.moc -I../../../../mkspecs/ linux-g++-64 -o .obj/qsql_odbc.o ../../../sql/drivers/odbc/qsql_odbc.cpp ../../../sql/drivers/odbc/qsql_odbc.cpp:193:44:错误:ISO C++ 禁止声明没有类型的“Q_DECLARE_SQLDRIVER_PRIVATE”[-fpermissive] Q_DECLARE_SQLDRIVER_PRIVATE(QODBCDriver) ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:193:44: 错误:预期的';'在成员声明的末尾 ../../../sql/drivers/odbc/qsql_odbc.cpp:在构造函数“QODBCResultPrivate::QODBCResultPrivate(QODBCResult*, const QODBCDriver*)”中: ../../../sql/drivers/odbc/qsql_odbc.cpp:198:33:错误:没有匹配函数调用‘QSqlResultPrivate::QSqlResultPrivate(QODBCResult*&, const QODBCDriver*&)’ hasSQLFetchScroll(true) ^ 在 ../../../sql/drivers/odbc/qsql_odbc.cpp:59:0 包含的文件中: /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql/private/qsqlresult_p.h:67:5:注意:候选:QSqlResultPrivate::QSqlResultPrivate() QSqlResultPrivate() ^ /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql/private/qsqlresult_p.h:67:5:注意:候选人期望0个参数,提供2个 /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql/private/qsqlresult_p.h:63:20:注意:候选:QSqlResultPrivate::QSqlResultPrivate(const QSqlResultPrivate&) 类 Q_SQL_EXPORT QSqlResultPrivate ^ /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql/private/qsqlresult_p.h:63:20:注意:候选人需要1个参数,提供2个 ../../../sql/drivers/odbc/qsql_odbc.cpp:200:30:错误:“drv_d_func”未在此范围内声明 unicode = drv_d_func()->unicode; ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:在成员函数‘void* QODBCResultPrivate::dpEnv() const’中: ../../../sql/drivers/odbc/qsql_odbc.cpp:209:49:错误:“drv_d_func”未在此范围内声明 SQLHANDLE dpEnv() const { 返回 drv_d_func() ? drv_d_func()->hEnv : 0;} ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:在成员函数‘void* QODBCResultPrivate::dpDbc() const’中: ../../../sql/drivers/odbc/qsql_odbc.cpp:210:49:错误:“drv_d_func”未在此范围内声明 SQLHANDLE dpDbc() const { 返回 drv_d_func() ? drv_d_func()->hDbc : 0;} ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:在成员函数‘bool QODBCResultPrivate::isStmtHandleValid()’中: ../../../sql/drivers/odbc/qsql_odbc.cpp:228:42:错误:“drv_d_func”未在此范围内声明 返回 disconnectCount == drv_d_func()->disconnectCount; ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:在成员函数‘void QODBCResultPrivate::updateStmtHandleState()’中: ../../../sql/drivers/odbc/qsql_odbc.cpp:233:34:错误:“drv_d_func”未在此范围内声明 disconnectCount = drv_d_func()->disconnectCount; ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:在构造函数“QODBCResult::QODBCResult(const QODBCDriver*)”中: ../../../sql/drivers/odbc/qsql_odbc.cpp:959:51: 错误:没有匹配函数调用‘QSqlResult::QSqlResult(QODBCResultPrivate&)’ : QSqlResult(*new QODBCResultPrivate(this, db)) ^ 在 /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql/private/qsqlresult_p.h:51:0 包含的文件中, 来自../../../sql/drivers/odbc/qsql_odbc.cpp:59: /usr/include/x86_64-linux-gnu/qt5/QtSql/qsqlresult.h:69:5: 注意:候选:QSqlResult::QSqlResult(QSqlResultPrivate&, const QSqlDriver*) QSqlResult(QSqlResultPrivate &dd, const QSqlDriver *db); ^ /usr/include/x86_64-linux-gnu/qt5/QtSql/qsqlresult.h:69:5:注意:候选人需要 2 个参数,提供 1 个 /usr/include/x86_64-linux-gnu/qt5/QtSql/qsqlresult.h:68:14:注意:候选:QSqlResult::QSqlResult(const QSqlDriver*) 显式 QSqlResult(const QSqlDriver * db); ^ /usr/include/x86_64-linux-gnu/qt5/QtSql/qsqlresult.h:68:14:注意:没有已知的参数 1 从‘QODBCResultPrivate’到‘const QSqlDriver*’的转换 ../../../sql/drivers/odbc/qsql_odbc.cpp:在成员函数‘virtual bool QODBCResult::exec()’中: ../../../sql/drivers/odbc/qsql_odbc.cpp:1464:36:错误:“QODBCResultPrivate 类”没有名为“drv_d_func”的成员 int 精度 = d->drv_d_func()->datetime_precision - 20; // (2 ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:1480:42:错误:“QODBCResultPrivate 类”没有名为“drv_d_func”的成员 d->drv_d_func()->datetime_precision, ^ Makefile:463: 目标 '.obj/qsql_odbc.o' 的配方失败 make: *** [.obj/qsql_odbc.o] 错误 1

【问题讨论】:

  • 尝试:sudo apt-get install unixodbc-dev unixodbc-bin unixodbc
  • 该屏幕截图很难使用...如果您可以将文本复制并粘贴到此处的<pre>…</pre> 块中会更好。
  • @TallTed 已编辑..
  • 注意 Ubuntu 已经为此预建了包,你可以 apt-get install libqt5sql5-odbc tdsodbc
  • @nos 我试过但没有成功..

标签: c++ qt ubuntu odbc driver


【解决方案1】:

问题可能是由于使用了错误的 qmake 版本。很可能它与您在源代码中使用的不同。

【讨论】:

  • True.. 我使用了完整路径并已编译.. 但我仍然没有加载相同的 QODCB 驱动程序,我设法获得了免费但现在我说“[unixODBC] [驱动程序管理器]无法打开库“SQL Server”:找不到文件 QODBC3:无法连接”
  • 看起来 unixODBC 无法加载 sql server 后端库。我建议首先使用 unixODBC 命令行工具检查您的 ODBC 连接。确保您的 unixODBC 设置正确且有效。
  • 我在尝试同时使用 isql 和 Qt [S1T00][unixODBC][Microsoft][ODBC Driver 13 for SQL Server]登录超时过期时收到此错误 [08001][unixODBC][Microsoft ][适用于 SQL Server 的 ODBC 驱动程序 13]TCP 提供程序:错误代码 0x2AF9 [08001][unixODBC][Microsoft][适用于 SQL Server 的 ODBC 驱动程序 13]与 SQL Server 建立连接时发生网络相关或特定于实例的错误.服务器未找到或无法访问。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。
  • 我把 localhost\sqlexpress 改成了 localhost 问题就解决了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 2019-12-05
  • 2022-10-19
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多