我开发了一个C程序,需要一些动态库,最值得注意的是libmysqlclient.so,我打算在某些远程主机上运行。看起来好像我有以下分配选项:在linux下发布一个带库依赖的c程序的选项
- 编译程序静态。
- 在远程主机上安装所需的依赖关系
- 分配程序的依赖关系。
第一个选项是有问题的,因为我在运行时需要glibc-version
(因为我现在使用glibc和libnss)。
我不确定第二个选择:是否有一种机制,检查安装的库版本是否足以让程序运行(在libxyz.so.VERSION旁边)。我可以在启动时检查ABI兼容性吗?
关于最后一个选项:我是否将所有共享库与二进制文件分发,或者只是可能未安装的共享库(例如libmysqlclient,而不是libm)。
除了这个,我可能会遇到ABI兼容性问题,如果我使用一个不同的二进制编译器,然后依赖建立与(例如二进制clang,库gcc)?
构建指定正确依赖关系的包('.deb','.rpm'),因此包管理器将自动安装它们。 –