我制作了一个使用共享对象的简单程序,用 dlopen() 打开它。我还编译并链接了共享对象,如下所示:

gcc -o libmylib.so libmylib.c -shared -fPIC -Wall

gcc -o program program.c -L. -lmylib -ldl -Wall

当我第一次尝试运行该程序时,它说的是
cannot open libmylib.so: no such file or directory

所以我在网上搜索,发现我必须将我的共享对象复制到 /lib/i386-linux-gnu/ 才能运行程序。所以我这样做了,它奏效了,但后来我尝试以其他方式做到这一点,因此我从 libmylib.so 目录中删除了 /lib/i3686-linux-gnu/。现在,当我尝试运行该程序时,它没有显示任何错误,但一直说 Segmentation fault 。很明显,共享对象无处可寻,但是如何在不复制任何内容的情况下链接它?

我正在使用 Ubuntu 11.10

最佳答案

当你编译程序时,你正确地链接了它;使用 -L. -lmylib 。但是,如果它不是标准的系统库,则执行环境需要知道去哪里寻找它。一种方法是使用环境变量 LD_LIBRARY_PATH ,如下所示:

LD_LIBRARY_PATH=. ./program

或者
export LD_LIBRARY_PATH=.
./program

关于linux - 如何在 C 中链接共享对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8538572/

10-09 20:48