Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中使用共享库的问题+;项目_C++_C_Mongodb_Gcc_Shared Libraries - Fatal编程技术网

C++ 在C+中使用共享库的问题+;项目

C++ 在C+中使用共享库的问题+;项目,c++,c,mongodb,gcc,shared-libraries,C++,C,Mongodb,Gcc,Shared Libraries,我正在尝试更改MongoDB的源代码并使用外部库中的函数。我已经能够更改构建脚本(SCons文件),并强制编译器与我将要使用的库进行额外的链接。虽然在编译源代码和链接目标文件时我没有遇到任何问题,但在启动mongod时我遇到了一个奇怪的错误。以下是我收到的消息(在mongod进程终止之前): 我可以通过将库的.so文件移动到/lib/x86_64-linux-gnu并将其重命名为.1来解决这个问题,这是mongod希望找到共享库的路径。我不知道这个问题的原因是什么,但是对于其他库,比如pthre

我正在尝试更改MongoDB的源代码并使用外部库中的函数。我已经能够更改构建脚本(SCons文件),并强制编译器与我将要使用的库进行额外的链接。虽然在编译源代码和链接目标文件时我没有遇到任何问题,但在启动mongod时我遇到了一个奇怪的错误。以下是我收到的消息(在mongod进程终止之前):

我可以通过将库的.so文件移动到/lib/x86_64-linux-gnu并将其重命名为.1来解决这个问题,这是mongod希望找到共享库的路径。我不知道这个问题的原因是什么,但是对于其他库,比如pthread,一切都很好。这个问题有什么具体的解决办法吗?换句话说,我应该怎么做才能使可执行程序使用正确的命名(而不是.1)在其他位置查找库文件

以下是LD_DEBUG=all 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

我不知怎么找到了解决我问题的办法。我想这可能对其他人也有帮助

基本上,当您使用make创建共享库时,应该定义.so文件名。这就是我的情况,我只是将它设置为一个适当的值,现在一切都正常了,至少我已经通过这样做修复了这个错误

在谷歌上查找,我发现,gcc-soname选项就是这样设计的

  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