[英]creating and using a dynamic shared library on 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 %p\n", 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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.