在 Solaris 上创建和使用动态共享库



我正在阅读在 solaris sparc 服务器上创建和使用动态共享库的过程。以下是我拥有的文件:

> 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 是我使用它创建共享库的头文件,根据此链接中提到的内容,使用以下命令创建共享库。

> 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,如下所示:并且没有错误。二进制 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 %pn", where);
        strcpy(where,"vijay");
        return(0);
}

您需要告诉应用程序从当前目录中查找 .so 文件:

CC -L. -lbad my_prog.cc -R <your current directory>

http://docs.oracle.com/cd/E18659_01/html/821-1383/bkana.html#bkawi

您也可以尝试设置 LD_LIBRARY_PATH 变量。

你应该做:

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

最新更新