我有一个小C程序,带有以下标题:
#include <gmp.h>
我编译它:
gcc test.c -o test.o -L/gmp_install/lib -lgmp
然后我可以运行得很好。但它正在使用&#34; stock&#34;我系统上的GMP库。
现在我想使用另一个版本的GMP库来编译它,我在本地安装它,但我无法使它工作。
新库显然安装在/usr/local/lib
:
... $ ls -l /usr/local/lib
-rw-r--r-- 1 root staff 1276320 Jun 15 02:22 libgmp.a
-rwxr-xr-x 1 root staff 914 Jun 15 02:22 libgmp.la
lrwxrwxrwx 1 root staff 16 Jun 15 02:22 libgmp.so -> libgmp.so.10.2.0
lrwxrwxrwx 1 root staff 16 Jun 15 02:22 libgmp.so.10 -> libgmp.so.10.2.0
-rwxr-xr-x 1 root staff 528715 Jun 15 02:22 libgmp.so.10.2.0
但无论我尝试什么,它显然都是使用过的旧库。
即使使用:
gcc perf.c -o perf.o -O3 -L/ -lgmp
但它在/usr/lib/x86_64-linux-gnu/
中使用了GMP版本。
在/ usr / local / bin中使用GMP版本的正确方法是什么,知道我还想保留旧版本吗?
此外,一旦创建了可执行文件,是否有一种简单的方法可以查看它将在运行时使用哪个库? (我可以使用一个版本的GMP创建可执行文件,然后使用另一个版本的GMP执行它,知道lib是动态链接的吗?)
答案 0 :(得分:1)
做两件事:
-L/usr/local/lib
标志在运行程序时设置LD_LIBRARY_PATH
变量以/usr/local/lib
。因此,如果您使用的是bash shell,则必须执行类似
$ export LD_LIBRARY_PATH=/usr/local/lib
$ ./your_program
在运行时使用/usr/local/lib
版本。此外,为了查看它将在运行时使用哪一个,您始终可以执行ldd <your binary name>
,这将打印出所有动态依赖项。