ld: library not found
Asked Answered
I

2

11

I'm trying to build a project that depends on SDL2 library. I've installed and linked it using homebrew:

> ls /usr/local/lib | grep SDL2
libSDL2-2.0.0.dylib
libSDL2.a
libSDL2.dylib
libSDL2_test.a
libSDL2main.a

I also added /usr/local/lib to my /etc/paths and ~/.bash_profile as well:

> cat /etc/paths
/usr/local/lib
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

However, when I try to build the project, I still get this error:

error: linking with `cc` failed: exit code: 1
note: cc '-m64' '-L' (...) '-lSDL2'
ld: library not found for -lSDL2
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Why does it happen and how can I fix it?

Inbeing answered 17/10, 2014 at 17:35 Comment(0)
I
18

I fixed the issue by adding /usr/local/lib to my $LIBRARY_PATH:

For bash, in ~/.bash_profile:

export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/lib"

And for fish shell, in ~/.config/fish/config.fish:

set -g -x LIBRARY_PATH $LIBRARY_PATH /usr/local/lib
Inbeing answered 17/10, 2014 at 18:19 Comment(0)
S
1

/etc/paths is for executable files, not shared libraries. Same with the $PATH environmental variable set in .bash_profile. These are the paths searched for programs when you type a command in the terminal.

What you need to do is change the linkers link path. See the answer to this question for details on how to set up the link path.

Shove answered 17/10, 2014 at 17:49 Comment(1)
The answer to the linked question suggests changing the call to the linked, but I don't call it myself; rather, it is called automatically by other tools used to compiled the project. Can I add library path globally?Inbeing

© 2022 - 2024 — McMap. All rights reserved.