Инструментарий C Код, связанный с libclntsh Oracle, приводит к сбоям при запуске результирующей программы. Программа завершается сигналом «Незаконная инструкция».Как исключить общую библиотеку из инструментализации с помощью очистки?
Ошибка присутствует, по крайней мере, для некоторых версий Oracle 11g и Purify.
Это known bug and IBM has published a workaround. К сожалению, обходной путь не помогает в моей рабочей среде.
Я использую
$ purify -version
Version 7.0.1.0-002.U 120210 Solaris SPARC
под Solaris 10 на Sun SPARC оборудовании. Я компиляция исходного кода C с Sun CC 11.
Как описан в обходном Я попытался исключить libclntsh из инструментализации так:
$ purify -verbose -cache-dir=purify_cache -always-use-cache-dir \
-selective -exclude-libs=/oracle/app/rdbms/ora11203/lib/libclntsh.so.11.1 \
cc -o myprogram ... -lclntsh
Это не работает. Purify просто говорит, что это инструмент libclntsh.so.11.1, и, конечно же, я получаю соответствующий файл _pp3_
, а не _pp0_
.
Я попытался вариации исключить шаблон:
-exclude-libs=libclntsh.so.11.1
-exclude-libs=clntsh.so
без какого-либо успеха.
Будучи в состоянии исключить libclntsh, также будет значительно время инструментализации. На этой машине SPARC требуется несколько минут, чтобы инструментализовать libclntsh.so.
Рассматривая обходной путь, он просто упоминает HPUX - но я надеюсь, что он также применим в Solaris ... как-то.
Любая идея, как сделать вышеприведенную работу с версией Linux Purify? – Raj
@ Радж, нет, я этого не делаю. Но, в Linux, я рекомендую заменить Purify на valgrind и/или GUD's mudflap (или в последней версии GCC заменяющий, дезинфицирующее средство для адреса) и/или дезинфицирующее средство для адресации LLVM clang. – maxschlepzig