昨天读到一篇介绍共享库问题的博客,很受启发。地址: https://amir.rachum.com/blog/2016/09/17/shared-libraries/。
文中的例子简述如下:同一目录下,有main.ccp
, random.h
和random.cpp
,将random.cpp
打包成 so 文件,再让main.cpp
和该 so 文件链接得到可执行文件main
。
但是有个疑问,在该博客中通过clang++ -o main main.o -lrandom -L.
之后,无法直接运行该可执行文件,报的错误是:
/main: error while loading shared libraries: librandom.so: cannot open shared object file: No such file or directory
但是经过我测试(分别在 Ubuntu 下的 g++ 9.3 和 Mac OS 下的 clang++ 12.0),我可以直接运行该可执行文件,通过ldd
命令也可看出 librandom.so 文件是能够被找到的。
linux-vdso.so.1 (0x00007ffe279d2000) librandom.so (0x00007f7776fca000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7776dcd000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7776bdb000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7776a8c000) /lib64/ld-linux-x86-64.so.2 (0x00007f7776fd6000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7776a71000)
那是不是意味着,从某个版本开始,g++/clang++能够自动查找当前目录下的 so 文件?如果是,如何确认 g++/clang++的可搜索的路径包括当前目前(即.
)?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.