Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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
Linux ARM cannon上的progam查找共享库,而ldconfig查找共享库_Linux_Arm_Shared Libraries_Gstreamer - Fatal编程技术网

Linux ARM cannon上的progam查找共享库,而ldconfig查找共享库

Linux ARM cannon上的progam查找共享库,而ldconfig查找共享库,linux,arm,shared-libraries,gstreamer,Linux,Arm,Shared Libraries,Gstreamer,我已经编译了自己的共享库“libgsttest.so”,并将其放在/usr/lib/test中 /usr/lib/test/libgsttest.so 我在/etc/ld.so.conf.d中添加了一个文件“test.conf”,其中包含一行: /usr/lib/test 我运行ldconfig。要检查ldconfig是否找到库,我运行: ldconfig -p | grep test libgsttest.so (libc6) => /usr/lib/test/libgsttest.

我已经编译了自己的共享库“libgsttest.so”,并将其放在/usr/lib/test中

/usr/lib/test/libgsttest.so
我在/etc/ld.so.conf.d中添加了一个文件“test.conf”,其中包含一行:

/usr/lib/test
我运行ldconfig。要检查ldconfig是否找到库,我运行:

ldconfig -p | grep test
libgsttest.so (libc6) => /usr/lib/test/libgsttest.so
这个共享库是由一个gstreamer插件使用的(但我的猜测是,这对问题并不重要)。当我启动插件时,linux:

Could not load plugin file: Opening module failed: libgsttest.so: cannot open shared object file: No such file or directory
你知道为什么我的程序找不到我的.ldconfig文件吗

编辑:我有完全相同的配置运行在Opensuse 13.1与英特尔处理器上,我没有任何问题

编辑2:有关我的配置的更多详细信息:

  • OpenSuse 13.1-英特尔64位操作系统
  • ARM Opensuse 13.1内部qemu仿真(在上述操作系统上);所以这不是一个本地的arm操作系统

编辑3:我确信库的格式是正确的:因为将它放在/usr/lib中并运行ldconfig修复了这个问题。真正的问题仍然存在:为什么我的程序在分区中找不到它?

我刚刚找到了一个似乎有帮助的解决方法:

我将我的库放入/usr/lib/并运行ldconfig-->一切正常

我从/usr/lib-->中删除了我的库,一切都正常

也许ldconfig试图变得太聪明;并且没有注意到/usr/lib/test/中的任何更改,因为它以前没有跟踪此文件夹。通过更改/usr/lib/I中的某些内容,可能会迫使他进行真正的刷新?

ldconfig不设置链接器名称;通常是这样做的 在库安装过程中,链接器名称仅创建为 指向“最新”soname或最新真名的符号链接。我 建议将链接器名称作为指向 soname,因为在大多数情况下,如果你想更新库 链接时自动使用它。我问陆海杰为什么要这么做 不会自动设置链接器名称。他的解释是错误的 基本上,您可能希望使用的最新版本运行代码 一个库,但可能希望开发与旧的 (可能不兼容)库。因此,ldconfig不做任何更改 关于您希望程序链接到什么的假设,因此安装程序 必须特别修改符号链接以更新链接器将要更新的内容 用于图书馆


与认识到您的问题的人相比,这不一定是最有效的解决方案,但
strace
将向您展示当您尝试运行此程序时实际发生的情况,包括动态链接器在搜索或加载尝试方面所做的操作。我刚刚尝试过,但strace在qemu环境中不起作用(不幸的是,这有点不稳定……但gstreamer框架似乎工作正常;编译工作相当不错,……您绝对确定此库的格式正确吗?您可能希望将其安装与已安装的工作库的安装进行比较,使用objdump或readelf比较文件详细信息,等等两个系统(linux和amd)上的库都使用完全相同的源代码和makefiles、相同的include和header(因为都是opensuse 13.1操作系统)…这不是问题所在;相反,您需要验证工具链是否生成了适当标识的适当ABI代码,文件是否使用正确的命名约定正确安装,等等。您可以通过验证您的过程来做到这一点,但需要将库文件与已知工作的文件进行比较(即,一个已经安装的系统库)是一个简单的交叉检查方法。谢谢你提供的信息,但我不认为这对我的问题有什么帮助。。。?