我正在开发一个跨平台应用程序,但在分发 Linux 二进制文件时遇到了麻烦。在 Windows 中,dll 是 -libsndfile-1.dll lua5.1.dll lua51.dll openal32.dll sfml-audio.dll sfml-graphics.dll sfml-network.dll sfml-system.dll sfml-window.dll
这是一个非常早期的预发布版本,所以我不想编写软件包。我只想让用户下载一个 tarball 并运行里面的二进制文件。用户在 Linux 中获取这些依赖项的典型方法是什么,而无需编写软件包?
PS 另外,我使用的是 64 位 Linux,但有一位用户报告说该应用程序无法在其 32 位 Linux 上运行。这可能是什么问题?我在 Windows 上没有遇到这个问题(Windows 是基于 64 位系统构建的,可在 32 位上运行)。
答案1
答案2
Linux 中的等效操作是将 .so 文件包含在包内的目录中,并设置一个 shell 脚本$LD_LIBRARY_PATH
来指向该目录,然后运行二进制可执行文件。
32 位与 64 位的问题在于,编译器会生成 64 位代码,并链接到 64 位库。您需要安装 32 位工具链才能构建 32 位二进制文件。您可以file
针对各种二进制文件运行以确认这一点。
答案3
您可以将程序静态链接到除 libc 和 libm 之外的所有库。(哎呀,您甚至可以链接它们)。
答案4
您可以使用以下方式获取二进制文件的依赖项ldd 命令
例如:
ldd program_binary
libctest.so.1 => /opt/lib/libctest.so.1 (0x00002aaaaaaac000)
libc.so.6 => /lib64/tls/libc.so.6 (0x0000003aa4e00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003aa4c00000)
但最好作为源共享,因为库可能是具有不同符号或不同架构的不同版本。