相关疑难解决方法(0)

C程序链接共享库而不设置LD_LIBRARY_PATH

我正在阅读GCC简介,它说如果一个软件包同时包含.a和.so.gcc更喜欢共享库.默认情况下,加载程序仅在预定义的一组系统目录(例如/usr/local/lib和)中搜索共享库/usr/lib.如果库不在其中一个目录中,则必须将其添加到加载路径,或者您需要使用-static选项强制它使用.a库.但是,我尝试了以下方法:

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
Run Code Online (Sandbox Code Playgroud)

它运行.该书说它应该有以下错误:

./a.out: error while loading shared libraries:
libgdbm.so.3: cannot open shared object file:
No such file or directory
Run Code Online (Sandbox Code Playgroud)

(好吧,这本书以GDBM为例,但我使用的是GMP,但这没关系吗?)

但是,我没有设置LD_LIBRARY_PATH=/opt/lib,你可以看到我也没有使用-static选项,但a.out仍然运行.

你能告诉我为什么,并告诉我如何得到书中描述的错误?是的我想要错误,所以我会理解我误解的内容.

c compiler-construction gcc

5
推荐指数
1
解决办法
1484
查看次数

标签 统计

c ×1

compiler-construction ×1

gcc ×1