【问题标题】:MySQL: Library not loaded from C programMySQL:库未从 C 程序加载
【发布时间】:2015-09-17 10:08:12
【问题描述】:

我想测试与我的 MySQL 服务器的非常简单的 C API 连接。我在mac上使用它。所以这里是代码:

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

int main(void)
{
    printf("MySQL client version: %s\n", mysql_get_client_info());

exit(0);
}

我用gcc编译

gcc -c `mysql_config --cflags` main.c

成功了。但是当我尝试运行它时

./main.o

错误是这样的

-bash: ./main.o: Permission denied

我可以匿名登录MySQL并运行select version():

shell>mysql
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.25    |
+-----------+
1 row in set (0.00 sec)

感谢 Sean,我的编译中有一个错误。应该是

gcc -o main `mysql_config --cflags` main.c `mysql_config --libs`

之后当我运行 ./main 我收到另一个错误:

dyld: Library not loaded: libmysqlclient.18.dylib

谢谢大家!

我已经通过将 libmysqlclient.dylib 的路径添加到 DYLD_LIBRARY_PATH 环境变量来解决这个问题。 这是某人可能需要的命令。

 export DYLD_LIBRARY_PATH=/usr/local/mysql/lib

【问题讨论】:

标签: mysql sql c macos


【解决方案1】:

gcc-c 参数表示:

编译或汇编源文件,但不要链接。

这意味着您没有生成有效的可执行文件。你需要一个额外的步骤:

gcc -c `mysql_config --cflags` main.c
gcc -o main main.o `mysql_config --libs`

这也可以合并成一行:

gcc -o main `mysql_config --cflags` main.c `mysql_config --libs`

那么你应该可以运行./main

【讨论】:

  • 非常感谢。我忘记运行第二个编译行,所以我收到拒绝访问错误。但是在我添加它并运行 ./main 之后,我遇到了另一个错误。 dyld:未加载库:libmysqlclient.18.dylib。也许您对此也有任何想法?
【解决方案2】:

你的编译语句看起来不对。

 gcc -c `mysql_config --cflags` main.c

不会生成可执行的二进制文件。 -c 选项用于生成目标文件,而不是可执行文件。编译后停止,链接未完成。

相反,要生成二进制文件,您应该编写

gcc main.c -o outfile <any other oprions>

其中-o &lt;file&gt; 用于将输出(二进制)放置到&lt;file&gt; 并运行outfile 之类的

./outfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多