2012-11-22 42 views
2

我正在閱讀在solaris sparc服務器上創建和使用動態共享庫的過程。下面 是文件我有:在solaris上創建和使用動態共享庫

> ls -lrt 
total 8 
-rw-rw-r-- 1 nobody nobody  848 Nov 22 14:45 badmemlib.hh 
-rw-rw-r-- 1 nobody nobody  1924 Nov 22 14:46 badmemlib.cc 
-rw-rw-r-- 1 nobody nobody  330 Nov 22 14:49 my_prog.cc 
> 
在上述文件badmemlib.hh是使用其中我建立與以下什麼是在 this鏈路中提到以下命令的共享庫頭文件

> CC -G -o libbad.so -h libbad.so -Kpic badmemlib.cc 

我運行上面的命令後,我有這些文件如下:

> ls -lrt 
total 26 
-rw-rw-r-- 1 nobody nobody  848 Nov 22 14:45 badmemlib.hh 
-rw-rw-r-- 1 nobody nobody  1924 Nov 22 14:46 badmemlib.cc 
-rw-rw-r-- 1 nobody nobody  330 Nov 22 14:49 my_prog.cc 
-rwxrwxr-x 1 nobody nobody  8284 Nov 22 15:11 libbad.so* 
> 

,你可以看到libbad.so是沒有任何錯誤建成。 現在我的主要是在文件my_prog.cc 我正在編譯文件my_prog.cc如下this: 並沒有錯誤。建立二進制a.out。

> CC -L. -lbad my_prog.cc 
> ls -lrt 
total 184 
-rw-rw-r-- 1 nobody nobody  848 Nov 22 14:45 badmemlib.hh 
-rw-rw-r-- 1 nobody nobody  1924 Nov 22 14:46 badmemlib.cc 
-rw-rw-r-- 1 nobody nobody  330 Nov 22 14:49 my_prog.cc 
-rwxrwxr-x 1 nobody nobody  8284 Nov 22 15:11 libbad.so* 
-rwxrwxr-x 1 nobody nobody  80224 Nov 22 15:14 a.out* 
> 

現在,如果我的a.out運行,那麼我面對錯誤是:

> ./a.out 
ld.so.1: a.out: fatal: libbad.so: open failed: No such file or directory 
Killed 

它提到,庫中沒有找到,但你可以看到圖書館以上在同一目錄下!

任何人都可以幫助我!

my_prog.cc.it的內容實際上會生成一個sigsegv,而badmemlib文件有一個信號處理程序。

#include <stdio.h> 
#include <stdlib.h> 
#include <signal.h> 
#include <string.h> 
#include "badmemlib.hh" 
#ifdef SOLARIS /* needed with at least Solaris 8 */ 
#include <siginfo.h> 
#endif 

int main(){ 
     char *where=(char *)0x123; 

     printf("About to write to %p\n", where); 
     strcpy(where,"vijay"); 

     return(0); 
} 

回答

0

您也可以嘗試設置LD_LIBRARY_PATH變量。

你應該做的事:

export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:<full path where library is present>