【问题标题】:Not able to link to compiled /.so source libraries in C++无法链接到 C++ 中已编译的 /.so 源库
【发布时间】: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


【解决方案1】:

你做错了。

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

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 2020-04-22
    • 2023-04-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多