c++ - 链接时未定义对“check(std::string const&)”的引用
问题描述
我在 C++ 中有一些“简单”代码来连接到 MySQL 数据库(这是 localhost,顺便说一句)。
#include <stdlib.h>
#include <iostream>
#include "mysql/include/mysql/jdbc.h"
using namespace sql;
int main() {
std::cout << "Test"<< std::endl;
try {
sql::Driver *myDriver;
sql::Connection *myConn;
sql::Statement *myStmt;
sql::ResultSet *myRes;
myDriver = sql::mysql::get_mysql_driver_instance();
myConn = myDriver ->connect("tcp://127.0.0.1", "root", "");
myConn->setSchema("root");
myStmt = myConn->createStatement();
myRes = myStmt->executeQuery("SELECT 'Hello World' AS _message");
while (myRes->next()) {
std::cout << myRes->getString("_message") << std::endl;
}
delete myRes;
delete myStmt;
delete myConn;
} catch (sql::SQLException &e) {
std::cout << "Filed connect to Database" << std::endl;
std::cout << "Error: " << e.what() << std::endl;
std::cout << "Error code: " << e.getErrorCode() << std::endl;
}
}
该文件与头文件jdbc.h
有很多不同#include
。
我使用 2 个命令来编译:
g++ -c -Wall -I/usr/include/cppconn connect.cpp -o connect.o
和
g++ -lm -L/usr/lib/x86_64-linux-gnu -lmysqlcppconn connect.o -o connect
这产生了这个链接错误:
/usr/bin/ld: connect.o: in function "check_lib()':
connect.cpp:(.text+0x2c): undefined reference to `check(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)"
/usr/bin/ld: connect.cpp:(.text+0x77): undefined reference to "check(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)"
/usr/bin/ld: connect.o: in function `sql::mysql::get_driver_instance_by_name(char const*)':
connect.cpp:(.text+0xfa): undefined reference to "sql::mysql::_get_driver_instance_by_name(char const*)"
collect2: error: ld returned 1 exit status
我用这个答案解决了这个问题:https ://stackoverflow.com/a/33395489/14814564 ,基本上是放在#define _GLIBCXX_USE_CXX11_ABI 0
文件的顶部,编译后会产生这个链接错误:
/usr/bin/ld: connect.o: in function "check_lib()':
connect.cpp:(.text+0x2c): undefined reference to "check(std::string const&)'
/usr/bin/ld: connect.cpp:(.text+0x77): undefined reference to "check(std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&)'
/usr/bin/ld: connect.o: in function `sql::mysql::get_driver_instance_by_name(char const*)':
connect.cpp:(.text+0xfa): undefined reference to "sql::mysql::_get_driver_instance_by_name(char const*)'
collect2: error: ld returned 1 exit status
为什么此链接错误不断弹出,我该如何解决?
解决方案
推荐阅读
- javascript - 从 react-datetime 解析日期/时间值
- swift - 使用 RxTableView , mvvm 架构在 tableView 中显示空状态标签
- java - java.nio.file.NoSuchFileException - 从 GCS 下载文件
- javascript - 单击按钮时从 html 表中获取行
- c - 在 main 外部和 main 内部分配全局结构变量
- c++ - 为什么 c++ CUFFT 结果没有频率和幅度信息?
- android - GET_SIGNATURES 已弃用
- azure - aks 报告“吊舱不足”
- kubernetes - kubernetes (GKE) 上的 keycloak 部署:入口类 -- nginx VS gce
- vuejs2 - 跨浏览器平台测试