【问题标题】:Undefined Reference to 'mysql_get_client_info' Eclipse Centos 6未定义对 'mysql_get_client_info' Eclipse Centos 6 的引用
【发布时间】:2016-01-29 19:39:31
【问题描述】:

我正在尝试编译以下内容:

#include <stdio.h>
#include <stdlib.h>
#include <my_global.h>
#include <mysql.h>


int main(void) {
    puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
    printf("MySQL client version: %s\n", mysql_get_client_info());
return EXIT_SUCCESS;
}

但是,Eclipse 给出以下错误消息:

构建目标:TestConsole4 调用:GCC C 链接器 gcc -L/usr/include -L/usr/include/mysql -o "TestConsole4" ./src/TestConsole4.o
./src/TestConsole4.o:在函数main': /home/hearme/workspace/TestConsole4/Debug/../src/TestConsole4.c:19: undefined reference tomysql_get_client_info' collect2: ld 返回 1 个退出状态 make: *** [TestConsole4] 错误 1

我一直在兜圈子试图解决这个问题,有什么想法吗?

谢谢

【问题讨论】:

    标签: c eclipse gcc


    【解决方案1】:

    来自 MySQL 参考手册:

    “必须使用链接命令中的 -lmysqlclient -lz 选项链接 MySQL 客户端。您可能还需要指定 -L 选项来告诉链接器在哪里可以找到库。例如,如果库安装在/usr/local/mysql/lib,在链接命令中使用这些选项:

    -L/usr/local/mysql/lib -lmysqlclient -lz"

    【讨论】:

    • 好的,所以这是 /usr/lib64/mysql/ 文件夹中的文件列表: libmysqlclient.so (link to libmysqlclient.so.16.0.0) libmysqlclient.so.16 (link to link到 libmysqllcient.so.16.0.0) libmysqlclient.so.16.0.0 我想我需要链接到 libmysqclient.so,但是,当我尝试在 Eclipse 中执行此操作时,我收到消息:/usr/bin/ld:找不到 -llibmysqlclient.so 这是链接器正在调用的内容: gcc -L/usr/lib64/mysql/ -o "TestConsole4" ./src/TestConsole4.o -llibmysqlclient.so -lz
    • 已解决:尽管要添加“-lmysqlclient -lz”
    【解决方案2】:

    链接器的参数顺序很重要。在列出需要它的文件后使用 mysql-config。链接器将看到 objectfile.o 需要 mysql_init 并在其后列出的库中查找符号。如果这些库在参数中较早列出,则不会再次搜索它们。 我的 C 代码:

    #include <mysql/mysql.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char **argv)
    {
      printf("MySQL client version: %s\n", mysql_get_client_info());
    
      exit(0);
    }
    

    编译命令例如(任何一个): gcc -o sqlversion.o sqlversion.c mysql_config --cflags --libs 或 gcc -o sqlversion.o sqlversion.c -lmysqlclient 或 gcc -o sqlversion.o sqlversion.c -I/usr/include/mysql -L/usr/lib/x86_64-linux-gnu -lz -lm -ldl -lssl -lmysqlclient

    运行例如:./sqlversion.o

    我的输出:MySQL 客户端版本:8.0.26

    这里 usr/lib/x86_64-linux-gnu 是安装 mysql 时安装的 libmysqlclient.a 库的路径。 你可以使用命令找到他的路径:find /usr/ -name 'libmysqlclient.a'

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多