1. 程式人生 > 其它 >Exception in thread “main“ java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema

Exception in thread “main“ java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema

ldd

list dynamic dependencies
列出動態依賴關係

使用方法例:

$ ldd darknet
        linux-vdso.so.1 =>  (0x00007ffe1c956000)
	libopencv_highgui.so.3.4 => /usr/local/lib/libopencv_highgui.so.3.4 (0x00007f34fd932000)
	libopencv_videoio.so.3.4 => /usr/local/lib/libopencv_videoio.so.3.4 (0x00007f34fd6de000)
	libopencv_imgcodecs.so.3.4 => /usr/local/lib/libopencv_imgcodecs.so.3.4 (0x00007f34fd400000)
	libopencv_imgproc.so.3.4 => /usr/local/lib/libopencv_imgproc.so.3.4 (0x00007f34fcd61000)
	libopencv_core.so.3.4 => /usr/local/lib/libopencv_core.so.3.4 (0x00007f34fc803000)
	libcuda.so.1 => /usr/lib/x86_64-linux-gnu/libcuda.so.1 (0x00007f34fb6ac000)
	libcudart.so.10.0 => /usr/local/cuda/lib64/libcudart.so.10.0 (0x00007f34fb432000)
	libcublas.so.10.0 => /usr/local/cuda/lib64/libcublas.so.10.0 (0x00007f34f6e9c000)
	libcurand.so.10.0 => /usr/local/cuda/lib64/libcurand.so.10.0 (0x00007f34f2d35000)
	libcudnn.so.7 => /usr/local/cuda/lib64/libcudnn.so.7 (0x00007f34db524000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f34db1a2000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f34dae99000)
...

ldconfig

ldconfig是一個動態連結庫管理命令,其目的為了讓動態連結庫為系統所共享。

ldconfig的主要用途:
預設搜尋/lilb和/usr/lib,以及配置檔案/etc/ld.so.conf內所列的目錄下的庫檔案。
搜尋出可共享的動態連結庫,庫檔案的格式為:lib*.so.,進而創建出動態裝入程式(ld.so)所需的連線和快取檔案。
快取檔案預設為/etc/ld.so.cache,該檔案儲存已排好序的動態連結庫名字列表。
ldconfig通常在系統啟動時執行,而當用戶安裝了一個新的動態連結庫時,就需要手工執行這個命令。

ldconfig需要注意的地方:
1、往/lib和/usr/lib裡面加東西,是不用修改/etc/ld.so.conf檔案的,但是新增完後需要呼叫下ldconfig,不然新增的library會找不到。
2、如果新增的library不在/lib和/usr/lib裡面的話,就一定要修改/etc/ld.so.conf檔案,往該檔案追加library所在的路徑,然後也需要重新呼叫下ldconfig命令。比如在安裝MySQL的時候,其庫檔案/usr/local/mysql/lib,就需要追加到/etc/ld.so.conf檔案中。命令如下:

echo "/usr/local/mysql/lib" >> /etc/ld.so.conf
ldconfig -v | grep mysql

或者在/etc/ld.so.conf.d/下建立配置檔案:

echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf

然後再執行ldconfig命令
3、如果新增的library不在/lib或/usr/lib下,但是卻沒有許可權操作寫/etc/ld.so.conf檔案的話,這時就需要往export裡寫一個全域性變數LD_LIBRARY_PATH,就可以了。