c/c++语言开发共享C程序链接共享库而不设置LD_LIBRARY_PATH

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

vim hello.c:

 #include  #include  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 

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

 ./a.out: error while loading shared libraries: libgdbm.so.3: cannot open shared object file: No such file or directory 

(好吧,这本书使用GDBM作为例子,但我使用了GMP,但这没关系吗?)

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

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

    从您对我的评论的回复:

     linux-gate.so.1 => (0xb7746000) libgmp.so.10 => /usr/lib/i386-linux-gnu/libgmp.so.10 (0xb76c5000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7520000) /lib/ld-linux.so.2 (0xb7747000) 

    所以,你的程序正在从/usr/lib

    您可以尝试做的是重命名/opt/lib ,并链接新名称。

     mv /opt/lib/libgmp.so /opt/lib/libgmp-test.so gcc hello.c -I/opt/include -L/opt/lib -lgmp-test 

    然后尝试运行该程序。 另外,将ldd与新a.out的结果与之前的结果进行比较。

    有很多方法可以做到这一点。 一种方法是配置动态链接器(我说的是linux)。

    其他可能性是使用dlopen()在程序中加载库。

      以上就是c/c++开发分享C程序链接共享库而不设置LD_LIBRARY_PATH相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/545567.html

      (0)
      上一篇 2021年1月10日
      下一篇 2021年1月10日

      精彩推荐