我正在尝试更改MongoDB的源代码并使用外部库中的函数。我已经能够更改构建脚本( SCons 文件)并强制编译器与我将要使用的库进行额外的链接。虽然在编译源代码和链接目标文件时我没有遇到任何问题,但在启动 mongod 时我遇到了一个奇怪的错误。这是我收到的消息(在 mongod 进程终止之前):
./mongod: error while loading shared libraries: .1: cannot open shared object file: No such file or directory
我能够通过将库的.so文件移动到/ lib / x86_64-linux-gnu并将其重命名为.1来解决这个问题,这是路径 mongod 期望找到的共享库。我不知道这个问题的原因是什么,但其他库如 pthread 的一切都很好。这个问题有什么具体的解决方案吗?换句话说,我该怎么做才能使可执行程序使用正确的命名(而不是.1)在其他位置查找库文件?
这是输出,而LD_DEBUG =所有mongod:
4564:
4564: file=libpthread.so.0 [0]; needed by ./mongod [0]
4564: find library=libpthread.so.0 [0]; searching
4564: search cache=/etc/ld.so.cache
4564: trying file=/lib/x86_64-linux-gnu/libpthread.so.0
4564:
4564: file=libpthread.so.0 [0]; generating link map
4564: dynamic: 0x00007f6ddccb7d50 base: 0x00007f6ddcaa0000 size: 0x000000000021c448
4564: entry: 0x00007f6ddcaa6cf0 phdr: 0x00007f6ddcaa0040 phnum: 9
4564:
4564:
4564: file=.1 [0]; needed by ./mongod [0]
4564: find library=.1 [0]; searching
4564: search cache=/etc/ld.so.cache
4564: trying file=/lib/x86_64-linux-gnu/.1
4564: search path=/lib/x86_64-linux-gnu/tls/x86_64:/lib/x86_64-linux-gnu/tls:/lib/x86_64-linux-gnu/x86_64:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/tls/x86_64:/usr/lib/x86_64-linux-gnu/tls:/usr/lib/x86_64-linux-gnu/x86_64:/usr/lib/x86_64-linux-gnu:/lib/tls/x86_64:/lib/tls:/lib/x86_64:/lib:/usr/lib/tls/x86_64:/usr/lib/tls:/usr/lib/x86_64:/usr/lib (system search path)
4564: trying file=/lib/x86_64-linux-gnu/tls/x86_64/.1
4564: trying file=/lib/x86_64-linux-gnu/tls/.1
4564: trying file=/lib/x86_64-linux-gnu/x86_64/.1
4564: trying file=/lib/x86_64-linux-gnu/.1
4564: trying file=/usr/lib/x86_64-linux-gnu/tls/x86_64/.1
4564: trying file=/usr/lib/x86_64-linux-gnu/tls/.1
4564: trying file=/usr/lib/x86_64-linux-gnu/x86_64/.1
4564: trying file=/usr/lib/x86_64-linux-gnu/.1
4564: trying file=/lib/tls/x86_64/.1
4564: trying file=/lib/tls/.1
4564: trying file=/lib/x86_64/.1
4564: trying file=/lib/.1
4564: trying file=/usr/lib/tls/x86_64/.1
4564: trying file=/usr/lib/tls/.1
4564: trying file=/usr/lib/x86_64/.1
4564: trying file=/usr/lib/.1
4564:
./mongod: error while loading shared libraries: .1: cannot open shared object file: No such file or directory
答案 0 :(得分:-1)
我以某种方式为我的问题找到了解决方案。认为它对其他人也有帮助。
基本上,当您使用 make 创建共享库时,应该定义.so文件名。这是我的情况,我只是把它设置为一个正确的值,现在一切正常,至少我已经修复了这个错误。
在Google上查找,我发现 gcc 的 -soname 选项就是这样做的。