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

标签 c compiler-construction shared-libraries gmp

我有一个带有以下 header 的小型 C 程序:

#include <gmp.h>

我编译它是这样做的:

gcc test.c -o test.o -L/gmp_install/lib -lgmp

然后我就可以正常运行了。但它在我的系统上使用“库存”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 执行它,并且知道该库是动态链接的吗?)

最佳答案

做两件事:

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

    的操作

    $ export LD_LIBRARY_PATH=/usr/local/lib

    $ ./your_program

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

关于c - 如何使用我刚刚从源代码构建的 GMP 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24225213/

相关文章:

c - 运行时加载的共享库中的 Libcurl 和 curl_global_init

compiler-construction - SICP第5章中的词法寻址有什么优势?

flash - 移动和 Web 应用程序的共享代码库?

linux - gdb 无法打开共享对象文件

c - 使用ffmpeg重新编码

c - 生成不同的随机数

compiler-construction - 编程语言的标准库是如何实现的?

java - 编译器的模糊参数,当它对我来说不模糊时

c++ - Linux 共享库被加载两次

c# - 如何构建软件框架