【问题标题】:Moving application to Linux server from local Linux machine将应用程序从本地 Linux 机器移动到 Linux 服务器
【发布时间】:2016-09-27 14:11:29
【问题描述】:

我需要在 Linux 服务器 (Ubuntu 12) 上的 VirtualBox 下运行我在本地开发人员 Linux 机器 (Ubuntu 14.04) 上构建的 C++ 应用程序,问题是应用程序有很多依赖项并且我没有 sudo on那个服务器,所以我不能做类似sudo apt-get install <libname-dev>的事情。

我使用ldd 找出服务器上缺少哪些库。

例如:

libopenblas.so.0 => not found
liblapack.so.3 => not found

我将这些库从本地机器 /usr/lib/ 复制到应用程序附近的服务器,然后手动创建符号链接。

要复制的文件:

liblapack.so.3.0
libopenblas.so.0

要创建的链接:

liblapack.so.3
libopenblas.so
  1. 做这种伎俩是不是坏主意,它总是有效吗?
  2. 我想知道Linux .so 命名约定,.so.3.0.so.0 等是什么意思?

【问题讨论】:

  • 这些是版本,如果您针对版本 X 构建程序并针对版本 Y
  • 您的技巧实际上是个坏主意,暗示您显然有两个不同的操作系统,它们可能具有不同的库,这些库可能工作也可能不工作。所以,你可能会很幸运,但不,它不一定会奏效。即使它看起来正在运行,也可能存在等待您执行特定库调用的潜在崩溃。至于编号系统,我刚刚看到semver.org,一个权威而清晰的文章。 Docker 可能是合适的。

标签: c++ linux shared-libraries sudo ldd


【解决方案1】:

在另一个 Ubuntu 12 上重新编译并静态链接缺少的库。 例如:

gcc -lsome_dynamic_lib code.c some_static_lib.a

【讨论】:

  • 如果我不能sudo apt-get install,获取这些用于服务器 Linux 的静态库的正确方法是什么?
  • 使用您拥有 sudo 访问权限的另一台服务器,或在 digitalocean.com 或任何 VPS 提供商上旋转一台服务器,或使用 docker 并拉取 ubuntu12 映像。
猜你喜欢
  • 2021-09-19
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
相关资源
最近更新 更多