【发布时间】:2013-07-30 06:28:26
【问题描述】:
我是 C++ 新手。我正在尝试在 C++ 程序中使用 MySQL 复制从 MySQL 读取二进制日志。
我从 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 构建库,但没有成功。
有人能猜出这可能是什么问题吗?我想我缺少一些基本的东西。
【问题讨论】:
-
-L在第二个示例中采用库搜索路径,而不是 .so 文件。 -
您需要使用
-l选项链接库。就像图书馆是libmysql.so一样,请尝试g++ source.cpp -lmysql。否则g++ source.c /path/to/the/object_code.so应该可以工作。 -
@phoxis:我尝试删除 .so 并仅使用 mysql lib 的路径。但我仍然遇到同样的错误。
-
我认为您需要使用
-l开关指定要链接的库。 -
-l 正在工作。至少它表明它正在使用 .so 库。但是对于其他似乎是标题的一部分但不是定义的东西,我收到了未定义的参考错误。这是否意味着 .cpp 不全面或未完全定义。
标签: mysql g++ cmake undefined-reference mysqlbinlog