【问题标题】:Crystal Lang: can't compile App with MySQL library on OSX El CapitanCrystal Lang:无法在 OSX El Capitan 上使用 MySQL 库编译 App
【发布时间】:2016-12-13 03:03:07
【问题描述】:

我正在将 Crystal Lang 开发迁移到运行 OSX El-Capitan 的新机器中。

我遇到了一个问题,当使用 MySQL 绑定编译 App 时,水晶编译器会抛出此错误:

$ crystal build src/test1.cr 
ld: library not found for -lmysqlclient

clang: error: 链接器命令失败,退出代码为 1(使用 -v 查看调用)

Error: execution of command failed with code: 1: `cc -o "/Users/james/cprojects/test1/test1" "${@}"  -rdynamic  -lmysqlclient -lpcre -lgc -lpthread /usr/local/Cellar/crystal-lang/0.18.7_1/src/ext/libcrystal.a -levent -liconv -ldl -L/usr/lib -L/usr/local/lib`

在以前的 OSX 版本中,我需要做的就是创建一个符号链接,它就可以解决问题:

ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

不幸的是,El Capitan,这是不可能的

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

这是/usr/local/mysql/lib/的内容(注意我现在用的是v20 insted of 18)

libmysqlclient.20.dylib libmysqld-debug.a   mecab
libmysqlclient.a    libmysqld.a     pkgconfig
libmysqlclient.dylib    libmysqlservices.a  plugin

我看到了一些关于使用特定于 XCode 的 install_name_tool 的想法。

迁移到 El Capitan 的任何人都可以解释一下吗?最好的方法是什么?

【问题讨论】:

    标签: mysql macos osx-elcapitan crystal-lang


    【解决方案1】:

    由于系统完整性保护,您无法在此处创建符号链接。但这实际上并不是必需的。

    只需将安装 MySQL 库的文件夹添加到“库搜索路径”构建设置中(或者,如果您不使用 Xcode 构建系统,请在路径中添加 -L 链接器选项)。你在那里添加了“/usr/lib”和“/usr/local/lib”,但是你的MySQL库在“/usr/local/mysql/lib”中,所以链接器找不到它。

    对于这种情况 install_name_tool 不是必需的。这可以更改加载程序在运行时用于查找库的路径。

    【讨论】:

    • 另一个选项是设置LIBRARY_PATH 环境变量。对于 Crystal,-L 标志可以通过--link-flags 选项传递给crystal build。我想知道自制软件或任何安装的 MySQL 是否无法在此处更正?
    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 2017-01-15
    • 2016-10-12
    • 2016-08-26
    • 1970-01-01
    相关资源
    最近更新 更多