在本機的linux環境下編譯好,可以在本機上執行,但是由於要到現場安裝,將程式直接拷貝過去時,發現程式執行報錯。例如
/usr/lib/libstdc++.so.6: version `glibcxx_3.4.9' not found
/usr/lib/libstdc++.so.6: version `glibcxx_3.4.11' not found
/lib/libc.so.6: version `glibc_2.7' not found (required by /usr/lib/libcrypto.so.10)
用命令ldd檢視程式依賴的庫檔案有:
我們可以看到這些庫檔案都是在/lib/路徑下的,特別是ld-linux.so.2,這裡的ld-linux.so.2決定的程式查詢庫的預設路徑起了作用。其他另外機器也有這些庫,不過由於庫檔案版本的原因導致程式run不起來。如果我們將這些庫拷貝到其他機器上,程式依賴這些版本的庫就不會有問題。因此我們可以這麼做:
(1)將這些庫檔案拷貝到乙個新建的資料夾下 /home/dynamic/下。
(2)然後修改makfile檔案,makefile的g++編譯選項最後,新增如下選項用來指定動態庫的優先搜尋路徑和動態鏈結器:
-wl,--rpath=/home/dynamic/ -wl,--dynamic-linker=/home/dynamic/ld-linux.so.2 ,重新編譯。再用ldd命令檢視編譯的程式就可以看到依賴的庫的檔案的路徑都響應修改了。
(3)如果將程式部署到另外臺機器,在其他機器上新建 /home/dynamic/,將剛剛在編譯器的機器上的庫檔案拷貝過去。這樣程式就可以正常執行了
具體也可以參考文章
CentOS7備份與恢復(不同機器)
tar 特點1 保留許可權 2 適合備份整個目錄 3 可以選擇不同的壓縮方式 4 如果選擇不壓縮還能實現增量備份,部份還原,參考man tar dd 特點1 對塊進行操作,能備份整個硬碟 包括分割槽表 mbr,其他linux不能很好支援的檔案系統 2 可以進行壓縮 麻煩一點 3 由於是備份整個硬碟,...
exe為什麼可以在不同機器上執行
1,很多資料都說,exe檔案是二進位製碼 指令 是可以直接被機器執行的 2,但是,所謂的二進位製碼 指令 不是因機而異的嗎?不同的機器,使用的cpu是不一樣的,指令集也不一樣,那為什麼在一台機器上生成的exe可以在別的不同指令集上的cpu上執行?3,在我看來,這個所謂的指令,恐怕指的並不是對應硬體的...
利用python快速實現不同機器間資料夾共享
python有乙個比較好用的功能,那就是很方便的實現共享資料夾。首先兩台主機都需要安裝python,在未建立邏輯連線之前它們是不區分主從機的。例如 現在有兩台機器,一台windows和一台linux,現在你想要讓linux機器的資料夾被共享,那麼 1.就在linux機器下的期望被共享的資料夾下執行 ...