2016-09-27 98 views
0

我需要運行C++應用程序,該應用程序在我的本地開發人員Linux機器上(Ubuntu 14.04)在Linux服務器(Ubuntu 12)上的VirtualBox下構建,應用程序具有大量依賴性的問題以及我在該服務器上沒有sudo,所以我不能做類似sudo apt-get install <libname-dev>的事情。將應用程序從本地Linux機器移動到Linux服務器

我使用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等等是什麼意思?
+0

這些都是版本,如果你建立你的程序對X版本,並運行對版本Ÿ

+0

你的訣竅實際上是一個糟糕的主意,暗示你已經明確了兩種不同的操作系統,可能有不同的庫可能或可能不起作用。所以,你可能會很幸運,但不,它不一定會奏效。即使它運行,可能會有潛在的崩潰等待您執行特定的庫調用。至於編號系統,我剛剛看到提及semver.org,一個權威和清晰的寫作。 Docker可能是合適的。 –

回答

1

在另一臺Ubuntu 12上重新編譯並且靜態鏈接缺少的庫。 e.g:

gcc -lsome_dynamic_lib code.c some_static_lib.a 
+0

如果我不能「sudo apt-get install」,爲Server Linux獲取這些靜態庫的正確方法是什麼? – mrgloom

相關問題