beepboop
beepboop

Reputation: 33

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?

Upvotes: 3

Views: 4342

Answers (2)

the duck
the duck

Reputation: 445

On my side, I did not make it work with a mysql-client only. I had to install mysql with

brew install mysql

In the end, what matters is that you have a version of the mysqlclient dynamic lib.

Mines where installed here :

/usr/local/lib/libmysqlclient.21.dylib
/usr/local/Cellar/mysql/8.0.15/lib/libmysqlclient.21.dylib

And it worked.

Upvotes: 3

Laney
Laney

Reputation: 1649

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.

Upvotes: 13

Related Questions