我是 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/