2013-08-23 70 views
0

嗨,我使用sshxcute框架來訪問Linux服務器。這個想法是從一個java項目執行一個用gcc編譯的應用程序。這GCC應用具有下一依賴性:使用ssh框架加載共享庫

libdl.so.2 => /lib64/libdl.so.2 (0x000000300ca00000) 
    libocci.so.11.1 => /e01/demov7/lib/libocci.so.11.1 (0x00002ac507b33000) 
    libclntsh.so.11.1 => /u01/app/oracle/product/11gR2/lib/libclntsh.so.11.1 (0x00002ac507e2e000) 
    libnnz11.so => /u01/app/oracle/product/11gR2/lib/libnnz11.so (0x00002ac50a459000) 
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x000000301ec00000) 
    libm.so.6 => /lib64/libm.so.6 (0x000000300c600000) 
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000301ac00000) 
    libc.so.6 => /lib64/libc.so.6 (0x000000300c200000) 
    /lib64/ld-linux-x86-64.so.2 (0x000000300be00000) 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x000000300ce00000) 
    libnsl.so.1 => /lib64/libnsl.so.1 (0x000000300fa00000) 
    libaio.so.1 => /usr/lib64/libaio.so.1 (0x0000003a92800000) 

但是,當我嘗試執行我的應用程序有一個錯誤

錯誤而載入共享庫:libocci.so.11.1:無法打開共享對象文件:沒有這樣的文件或目錄

我是否需要執行somme命令或配置一些環境變量以允許訪問服務器庫?

我在這裏附上我的代碼。

 SSHExec ssh = null; 
     ConnBean cb = new ConnBean("127.0.0.1", "user", "password"); 
     ssh = SSHExec.getInstance(cb); 

     CustomTask ct1 = new ExecCommand("./myapplication"); 
     ssh.connect();   

     Result res = ssh.exec(ct1); 

     if (res.isSuccess) { 
      response = res.sysout; 
     } else { 
      response = res.error_msg; 
     } 

     ssh.disconnect() ; 

回答

0

使用.bashrc文件並與共享庫使用ssh執行工作完全的路徑設置LD_LIBRARY_PATHPATH變量!所有與共享庫的依賴關係都解決了。感謝larsmans

1

嘗試設置LD_LIBRARY_PATH以包括自定義庫目錄,例如,

LD_LIBRARY_PATH=/e01/demov7/lib:/u01/app/oracle/product/11gR2/lib 
+0

我把我的.bash_profile配置爲LD_LIBRARY – smeerkahoven

+1

@smeerkahoven:'.bash_profile'只能被登錄shell讀取。嘗試將它放在'.bashrc'中。 –

+0

非常棒!我讀了這兩個文件之間的差異。非常感謝。我設置了LD_LIBRARY_PATH和PATH變量並工作。雖然使用ps-fu,但進程不顯示,但與ps fux工作! – smeerkahoven