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

时间:2013-07-30 08:02:55

标签: mysql g++ cmake undefined-reference mysqlbinlog

我是C ++的新手。我试图在C ++程序中使用MySQL复制来从MySQL读取binlog。

我从Internet获取了头文件和.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)编译我的程序时,我正在尝试调用所有方法的错误未定义引用。见下文:

/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构建库,但没有运气。 可以猜出这可能是什么问题吗?我想我错过了一些基本的东西。

1 个答案:

答案 0 :(得分:0)

你做错了。

要链接的库必须在之后在需要它们的对象之后,所以将命令链接到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