【发布时间】: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
- 做这种伎俩是不是坏主意,它总是有效吗?
- 我想知道Linux .so 命名约定,
.so.3.0、.so.0等是什么意思?
【问题讨论】:
-
这些是版本,如果您针对版本 X 构建程序并针对版本 Y
-
您的技巧实际上是个坏主意,暗示您显然有两个不同的操作系统,它们可能具有不同的库,这些库可能工作也可能不工作。所以,你可能会很幸运,但不,它不一定会奏效。即使它看起来正在运行,也可能存在等待您执行特定库调用的潜在崩溃。至于编号系统,我刚刚看到semver.org,一个权威而清晰的文章。 Docker 可能是合适的。
标签: c++ linux shared-libraries sudo ldd