工具化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