我正在使用C语言制作一个共享库。该库依赖于 libjpeg 和 X api。我在 Ubuntu 18.04 操作系统上构建它,并使用以下命令来构建它gcc mycode.c -o libname.so --shared -lX11 -lXss -lXExt -ljpeg -fPIC
:
我想在基于 Debian 的操作系统上使用这个库,例如 Debian OS。当我在 Debian 9.9 上调用这个库的函数时,我收到一个异常Unable to load a file libname.so or one of it's dependencies
。但是当我在 Debian 上使用相同的命令构建此 C 代码并进一步使用它时 - 一切正常。
我认为问题出在库文件因为在 Ubuntu 上我使用名为库文件但 Debian 上没有同名的库,我使用libjpeg-turbo。
请帮助我了解如何在 Ubuntu 中构建我的库,然后在其他基于 Debian 的系统上使用它。
另外,我想提一下,我不是 Linux 发行版和它们之间差异的专家,如果我想做的事情是不可能的,很抱歉浪费时间。
答案1
当你这样做时:
ldd path/to/your/libname.so
在 Debian 系统上,然后ldd
将向您显示它认为库链接到的内容以及 ld.so 是否能够解析/查找列出的库。
这应该会告诉您实际问题是什么以及 Debian 系统上缺少哪个依赖项/库。
更好的是这样做:
ldd path/to/the/executable_that_links_to_libname
因为这会向您(以及这里的我们)显示您上面省略的信息。