如何使用我刚从源代码构建的GMP库?

时间:2014-06-14 23:30:34

标签: c compiler-construction shared-libraries gmp

我有一个小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是动态链接的吗?)

1 个答案:

答案 0 :(得分:1)

做两件事:

  1. 编译时使用-L/usr/local/lib标志
  2. 在运行程序时设置LD_LIBRARY_PATH变量以/usr/local/lib。因此,如果您使用的是bash shell,则必须执行类似

    的操作

    $ export LD_LIBRARY_PATH=/usr/local/lib

    $ ./your_program

  3. 在运行时使用/usr/local/lib版本。此外,为了查看它将在运行时使用哪一个,您始终可以执行ldd <your binary name>,这将打印出所有动态依赖项。