我有一个带有以下 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 执行它,并且知道该库是动态链接的吗?)
最佳答案
做两件事:
- 使用
-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>
这将打印出所有动态依赖项。
关于c - 如何使用我刚刚从源代码构建的 GMP 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24225213/