在 linux 中使用共享库执行二进制文件

Posted

技术标签:

【中文标题】在 linux 中使用共享库执行二进制文件【英文标题】:Executing a binary with a shared library in linux 【发布时间】:2014-03-19 16:14:28 【问题描述】:

我正在制作一个简单的 hello world 程序来学习如何在 linux 中链接共享库。我已经设法使用以下方法将主程序编译成带有共享库的可执行文件:

g++ -fPIC -c lab2_hello_main.cpp    <--create position independent objects

g++ -fPIC -c lab2_hello_sub.cpp

g++ -fPIC -shared -Wl,-soname=libfuncs.so.1.0 *.o -o libfuncs.so.1.0 -lc <--make the shared library

ln -s libfuncs.so.1.0 libfuncs.so <-- soft links for compiling and running

ln -s libfuncs.so.1.0 libfuncs.so.1

g++ -o hello_dyn lab2_hello_main.cpp -L/mypath -lfuncs <-- Linking the library to main

当我在 hello_dyn 上执行 ldd 时,我得到一个输出,指出找不到库:

"libfuncs.so.1.0 =&gt; not found" 它自动查找的其他库很好。

有人知道为什么会这样吗?

【问题讨论】:

google LD_LIBRARY_PATH 正是我需要知道的。谢谢 【参考方案1】:

您的共享库的位置不在链接器的搜索路径中。您可以通过将库所在的目录添加到LD_LIBRARY_PATH 环境变量来确认这一点,然后再次运行ldd。有关详细信息,请参阅 ld.so(8) 手册页。

【讨论】:

太棒了!感谢您的及时回复!

以上是关于在 linux 中使用共享库执行二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 下正确安装 Ghostscript 作为共享库

如何在配置/构建(linux)期间微调二进制文件在哪里查找其共享库?

linux

linux命令

Linux——C库

linux 静态库共享库