工具化C代码与Oracle的libclntsh链接导致运行生成的程序时崩溃。该程序以“非法指令”信号终止。如何通过纯化从工具化中排除共享库?
至少在某些版本的Oracle 11g和Purify中存在该错误。
这是一个known bug and IBM has published a workaround。不幸的是,解决方法在我的工作环境中无效。
我在Sun SPARC硬件使用
$ purify -version
Version 7.0.1.0-002.U 120210 Solaris SPARC
的Solaris 10下。我编译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
@Raj,不,我不知道。但是,在Linux上,我建议使用valgrind和/或GCC的mudflap(或最近的GCC版本中的替换,地址清除程序)和/或LLVM clang的地址清理程序来替换Purify。 – maxschlepzig