создание и использование динамической разделяемой библиотеки на 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);
}

2

Решение

Вы должны указать приложению найти файл .so из текущей директории:

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

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

1

Другие решения

Вы также можете попробовать установить LD_LIBRARY_PATH переменная.

Вы должны делать:

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

По вопросам рекламы [email protected]