C program linking with shared library without setting LD_LIBRARY_PATH
c, compiler-construction, gcc
Solution
From your response to my comment:
linux-gate.so.1 => (0xb7746000)
libgmp.so.10 => /usr/lib/i386-linux-gnu/libgmp.so.10 (0xb76c5000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7520000)
/lib/ld-linux.so.2 (0xb7747000)
So, your program is picking up the lib from `/usr/lib`.
What you can try to do is rename the lib in your `/opt/lib`, and link against the new name.
mv /opt/lib/libgmp.so /opt/lib/libgmp-test.so
gcc hello.c -I/opt/include -L/opt/lib -lgmp-test
Then try running the program. Also, compare the result of `ldd` against the new `a.out` against what you got before.
Problem
I was reading Introduction to GCC and it says if a package has both .a and .so. gcc prefer the shared library. By default the loader searches for shared libraries only in a predefined set of system directories, such as `/usr/local/lib` and `/usr/lib`. If the library is not located in one of these directories it must be added to the load path, or you need to use `-static` option to force it to use the .a library. However, I tried the following: vim hello.c: ``` #include <gmp.h> #include <stdio.h> int main() { mpz_t x; mpz_init(x); return 0; } gcc hello.c -I/opt/include -L/opt/lib -lgmp (my gmp library is in opt) ./a.out ``` And it runs. The book says it should have the following error: ``` ./a.out: error while loading shared libraries: libgdbm.so.3: cannot open shared object file: No such file or directory ``` (well, the book uses GDBM as example but I used GMP, but this won't matter right?) However, I did not set `LD_LIBRARY_PATH=/opt/lib`, and as you can see I did not use `-static` option either, but `a.out` still runs. Can you all tell me why and show me how to get the error described in the book? Yes I want the error so I will understand what I misunderstood.