2013-12-08 25 views
0

在我的solaris 64位機上,我通過鏈接3個對象文件drivermain.o(2),testcol.o(3)和teststmt.o創建可執行文件「drivertest」 (3)。我在命令中使用了-m64選項來創建64位可執行文件。當我嘗試運行可執行文件時,出現錯誤「非法指令(核心轉儲)」。當我嘗試使用dbx命令查看核心時,它說「dbx:File`drivertest'不是ELF可執行文件」。我的可執行文件是64位的,那爲什麼dbx不能在64位應用程序中工作?Solaris上的鏈接器和體系結構類型錯誤

此外,當我在可執行文件上運行ldd命令時,它會爲幾個依賴關係(4)提供「文件未找到」錯誤,所有這些錯誤都存在於/ export/home/builds/pc9x_root/960/build/powrmart /pmbuild/bin/SunOS.64.r(5),並且此目錄包含在使用setenv命令導出的LD_LIBRARY_PATH中。 爲什麼這也發生?

(1) 
CC -G -m64 -o drivertest SunOS.64.r/drivermain.o SunOS.64.r/testcol.o SunOS.64.r/teststmt.o \ 
-L/export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r -L/databases/oracle10.2.0_64BIT/lib -L/export/home/builds/pc9x_root/960/repo/third-party-libs/ACE/ace -L/export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r \ 
-lpmcuti -lpmasrt -lpmser -lpmi18n -lpmdec -lpmodl -lclntsh -lpmicudata -lpmicui18n -lpmicuio -lpmicuuc -lpmsdkcmn 



(2) 
CC +w +w2 -mt -features=extensions -erroff=doubunder -m64 -O -KPIC -m64 -D_REENTRANT -DRW_MULTI_THREAD -DRW_NO_STL -DRW_BCB_NEW_IOSTREAMS -DPM_64BIT -DFD_SETSIZE=65536 -DUNIX -DSunOS -DINFA_PREFIX -I. -I/export/home/builds/pc9x_root/960/build/powrmart/server/dwriter -I/export/home/builds/pc9x_root/960/build/powrmart/server/dwriter/wrtfile -I/export/home/builds/pc9x_root/960/build/powrmart/server/include -I/export/home/builds/pc9x_root/960/build/powrmart/server/include/cef -I/export/home/builds/pc9x_root/960/build/powrmart/server/dmapper/trans -I/export/home/builds/pc9x_root/960/build/powrmart/server/dmapper/scrub -I/export/home/builds/pc9x_root/960/build/powrmart/server/dreader -I/export/home/builds/pc9x_root/960/build/powrmart/server/cmnutils -I/export/home/builds/pc9x_root/960/build/powrmart/common/cmnmisc -I/export/home/builds/pc9x_root/960/repo/third-party-libs/mitkerberos/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/CURL/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/OPENSSL/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/PMTL_PC -I/export/home/builds/pc9x_root/960/repo/third-party-libs/STLPORT_INCLUDE/stlport -I/export/home/builds/pc9x_root/960/repo/third-party-libs/ICU/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/ICU/source/common \ 
     -c /home/devops/drivertest/drivermain.cpp -o SunOS.64.r/drivermain.o 

(3)    
CC +w +w2 -mt -features=extensions -erroff=doubunder -m64 -O -KPIC -m64 -D_REENTRANT -DRW_MULTI_THREAD -DRW_NO_STL -DRW_BCB_NEW_IOSTREAMS -DPM_64BIT -DFD_SETSIZE=65536 -DUNIX -DSunOS -DINFA_PREFIX -I. -I/export/home/builds/pc9x_root/960/build/powrmart/server/dwriter -I/export/home/builds/pc9x_root/960/build/powrmart/server/dwriter/wrtfile -I/export/home/builds/pc9x_root/960/build/powrmart/server/include -I/export/home/builds/pc9x_root/960/build/powrmart/server/include/cef -I/export/home/builds/pc9x_root/960/build/powrmart/server/dmapper/trans -I/export/home/builds/pc9x_root/960/build/powrmart/server/dmapper/scrub -I/export/home/builds/pc9x_root/960/build/powrmart/server/dreader -I/export/home/builds/pc9x_root/960/build/powrmart/server/cmnutils -I/export/home/builds/pc9x_root/960/build/powrmart/common/cmnmisc -I/export/home/builds/pc9x_root/960/repo/third-party-libs/mitkerberos/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/CURL/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/OPENSSL/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/PMTL_PC -I/export/home/builds/pc9x_root/960/repo/third-party-libs/STLPORT_INCLUDE/stlport -I/export/home/builds/pc9x_root/960/repo/third-party-libs/ICU/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/ICU/source/common \ 
     -c /home/devops/drivertest/testcol.cpp -o SunOS.64.r/testcol.o 

(4) 
CC +w +w2 -mt -features=extensions -erroff=doubunder -m64 -O -KPIC -m64 -D_REENTRANT -DRW_MULTI_THREAD -DRW_NO_STL -DRW_BCB_NEW_IOSTREAMS -DPM_64BIT -DFD_SETSIZE=65536 -DUNIX -DSunOS -DINFA_PREFIX -I. -I/export/home/builds/pc9x_root/960/build/powrmart/server/dwriter -I/export/home/builds/pc9x_root/960/build/powrmart/server/dwriter/wrtfile -I/export/home/builds/pc9x_root/960/build/powrmart/server/include -I/export/home/builds/pc9x_root/960/build/powrmart/server/include/cef -I/export/home/builds/pc9x_root/960/build/powrmart/server/dmapper/trans -I/export/home/builds/pc9x_root/960/build/powrmart/server/dmapper/scrub -I/export/home/builds/pc9x_root/960/build/powrmart/server/dreader -I/export/home/builds/pc9x_root/960/build/powrmart/server/cmnutils -I/export/home/builds/pc9x_root/960/build/powrmart/common/cmnmisc -I/export/home/builds/pc9x_root/960/repo/third-party-libs/mitkerberos/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/CURL/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/OPENSSL/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/PMTL_PC -I/export/home/builds/pc9x_root/960/repo/third-party-libs/STLPORT_INCLUDE/stlport -I/export/home/builds/pc9x_root/960/repo/third-party-libs/ICU/include -I/export/home/builds/pc9x_root/960/repo/third-party-libs/ICU/source/common \ 
     -c /home/devops/drivertest/teststmt.cpp -o SunOS.64.r/teststmt.o 

(5) 
psrux902b1% ldd drivertest 
    libpmcuti.so => (file not found) 
    libpmasrt.so => (file not found) 
    libpmser.so => (file not found) 
    libpmi18n.so => (file not found) 
    libpmdec.so => (file not found) 
    libpmodl.so => (file not found) 
    libclntsh.so.10.1 =>  /databases/oracle10.2.0_64BIT/lib/libclntsh.so.10.1 
    libpmicudata.so.32 => /export/home/builds/pc9x_root/960/repo/third-party-libs/ICU/lib/libpmicudata.so.32 
    libpmicui18n.so.32 => /export/home/builds/pc9x_root/960/repo/third-party-libs/ICU/lib/libpmicui18n.so.32 
    libpmicuio.so.32 =>  /export/home/builds/pc9x_root/960/repo/third-party-libs/ICU/lib/libpmicuio.so.32 
    libpmicuuc.so.32 =>  /export/home/builds/pc9x_root/960/repo/third-party-libs/ICU/lib/libpmicuuc.so.32 
    libpmsdkcmn.so =>  (file not found) 
    libnnz10.so => /databases/oracle10.2.0_64BIT/lib/libnnz10.so 
    libkstat.so.1 =>   /lib/64/libkstat.so.1 
    libnsl.so.1 => /lib/64/libnsl.so.1 
    libsocket.so.1 =>  /lib/64/libsocket.so.1 
    libgen.so.1 => /lib/64/libgen.so.1 
    libdl.so.1 => /lib/64/libdl.so.1 
    libsched.so.1 =>   /usr/lib/64/libsched.so.1 
    libaio.so.1 => /lib/64/libaio.so.1 
    librt.so.1 => /lib/64/librt.so.1 
    libm.so.2 =>  /lib/64/libm.so.2 
    libc.so.1 =>  /lib/64/libc.so.1 
    libpthread.so.1 =>  /lib/sparcv9/libpthread.so.1 
    libmp.so.2 => /lib/64/libmp.so.2 
    libmd.so.1 => /lib/64/libmd.so.1 
    libscf.so.1 => /lib/64/libscf.so.1 
    libdoor.so.1 => /lib/64/libdoor.so.1 
    libuutil.so.1 =>   /lib/64/libuutil.so.1 
    /platform/SUNW,T5240/lib/sparcv9/libc_psr.so.1 
    /platform/SUNW,T5240/lib/sparcv9/libmd_psr.so.1 


(6) 
psrux902b1% ls /export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r/libpmasrt.so 
/export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r/libpmasrt.so 
psrux902b1% ls /export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r/libpmser.so 
/export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r/libpmser.so 
psrux902b1% ls /export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r/libpmi18n.so 
/export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r/libpmi18n.so 
psrux902b1% ls /export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r/libpmdec.so 
/export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r/libpmdec.so 
psrux902b1% ls /export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r/libpmodl.so 
/export/home/builds/pc9x_root/960/build/powrmart/pmbuild/bin/SunOS.64.r/libpmodl.so 
+0

在Solaris上,dbx附帶Studio編譯器 - 您使用dbx的哪個編譯器版本? – alanc

回答

0

你或許可以用file(1)檢查什麼類型的ELF二進制文件,對象/可執行文件的。如果您嘗試混合使用32b和64b ELF對象,那麼它不會起作用(即,如果libpmcuti.so是32b對象而您的可執行文件是64b)。還要確保LD_LIBRARY_PATH實際上已導出。由於您使用-m64,因此默認情況下,您的工具鏈是32b:dbx也可能是32b,並且無法使用64b可執行文件?

+0

文件命令確實說/ usr/bin/dbx是32位,但我在哪裏可以找到64位dbx? –

+0

如果Studio的dbx命令檢測到您希望它通過64位文件運行,則該命令足夠聰明,可以從$ STUDIOHOME/prod/bin/$ MACH64重新執行自身。 –

相關問題