Search code examples
mysqlmacosrustlinker-errorsrust-diesel

How to link mysql-client installed from Homebrew with diesel-cli?


I have been trying to install the Rust Diesel CLI tool using cargo install diesel_cli, but the installation fails with a linking error

ld: library not found for -lmysqlclient
 clang: error: linker command failed with exit code 1 
(use -v to see invocation)

I installed the MySQL client using Homebrew: brew install mysql-client. During installation I got the following warning:

mysql-client is keg-only, which means it was not symlinked into /usr/local,
because conflicts with mysql.
If you need to have mysql-client first in your PATH run:
  echo 'export PATH="/usr/local/opt/mysql-client/bin:$PATH"' >> ~/.bash_profile
For compilers to find mysql-client you may need to set:
  export LDFLAGS="-L/usr/local/opt/mysql-client/lib"
  export CPPFLAGS="-I/usr/local/opt/mysql-client/include”

I set the PATH and flags as in that warning message, but I still get the above linking error when trying to install the diesel-cli tool. I am unfamiliar with how to do linking in Rust - are there extra steps I need to do here to link mysqlclient directly?


Solution

  • Cargo ignores LDFLAGS and CPPFLAGS, you should set RUSTFLAGS instead. Something like this untested invocation:

    RUSTFLAGS="-L/your_lib -I/your_include" cargo install diesel_cli
    

    Relevant documentation.