mysql - 无法链接到 C++ 中已编译/.so 源库

标签 mysql g++ cmake undefined-reference mysqlbinlog

我是 C++ 新手。我正在尝试在 C++ 程序中使用 MySQL 复制来从 MySQL 读取二进制日志。

我得到了头文件和 .cpp源文件来自互联网。现在我已将头文件放在 /usr/include/mysql 中文件夹并设置 CPLUS_INCLUDE_PATH 的路径指向它。它能够使用头文件。另外,我放置了 .cpp文件位于 /usr/lib64/mysql文件夹,我编译了所有 .cpp文件来创建.o文件位于同一目录中。

但是当我使用g++编译我的程序时( g++ -I/usr/include/mysql -L/usr/lib64/mysql/ -g bin_log.cpp -o bin_log.out ),我尝试调用的所有方法都收到 Undefined Reference to 错误。见下文:

/home/oracle/MySQL_To_Db2_Replication/bin_log.cpp:17:
undefined reference to `mysql::system::create_transport(char const*)
undefined reference to `mysql::Binary_log::Binary_log(mysql::system::Binary_log_driver*)'
undefined reference to `mysql::Binary_log::connect()'
undefined reference to `mysql::Binary_log::wait_for_next_event(mysql::Binary_log_event**)'
undefined reference to `mysql::Binary_log::get_position()'

我还尝试创建一个 .so 文件并在编译时链接它,但它不起作用。 (我使用 g++ -I/usr/include/mysql -L/usr/lib64/mysql/binlogapi.so -g bin_log.cpp -o bin_log.out )。

我尝试使用 cmake 构建库,但没有运气。 有谁能猜到这可能是什么问题吗?我想我错过了一些基本的东西。

最佳答案

你做错了。

要链接的库必须位于需要它们的对象之后,因此请将链接到 libbinlogapi.so 的命令放在 .cpp 文件,并且由于它依赖于 MySQL 客户端 API,因此您还需要链接到该文件,该文件通常称为 libmysqlclient.so,因此您需要如下所示的内容:

g++ -I/usr/include/mysql -L/usr/lib64/mysql/ -g bin_log.cpp -o bin_log.out -lbinlogapi.so -lmysqlclient

关于mysql - 无法链接到 C++ 中已编译/.so 源库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17941431/

相关文章:

cmake - 找不到 CMAKE_CUDA_COMPILER

python - 如何从mysql数据库的fatched数据中替换()和,

c++ - 错误 - 编译 g++ 文件时出现 "#include expects "FILENAME"or <FILENAME>"

c++ - 如何在 g++ 中设置警告以警告返回指向局部变量的指针?

c++ - cmake, boost::filesystem 链接错误 (undefined directory_iterator.operator!=)

mysql - 使用可伸缩性选项设置多个 MySQL 数据库

python - 由于字符串值之一的 "\",mysql 查询失败

linux - g++错误: "expected )" before formal argument of template member function

C++ & Clion & GTK3 & glade 信号不工作