我制作了一个使用共享对象的简单程序,用 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/