Saturday, March 20, 2010

shared library測試

給未來的裕翔

當我對 facedetect.cpp編譯後的object檔做連結時

g++ -o facedetect  facedetect.o -L/usr/lib -lhighgui

ldd facedetect

linux-gate.so.1 =>  (0x00da3000)
libhighgui.so.4 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x07613000)
libm.so.6 => /lib/libm.so.6 (0x00a38000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x07442000)
libc.so.6 => /lib/libc.so.6 (0x0089e000)
libcv.so.4 => not found
libcxcore.so.4 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0x00a1c000)
/lib/ld-linux.so.2 (0x0087c000)


我只決定一個libhighgui.so, 其它是誰決定的?

系統? 還是libhighgui.so? 因為除了libhighgui.so

libcv.solibcxcore.so也都是opencv裡面的shared library

目前不知道是誰決定的

有些shared library的後面是接not found

既然沒找到, 為什麼可以編譯?

改成g++ -o facedetect  facedetect.o -L/usr/lib -lhighgui -lcv

ldd查看依舊是十個, 只有顯示順序改變

後來發現, 其實我路徑也給錯了

應該是要-L/usr/local/lib

可是剛兩次連結也都通過了

要通過跟路徑沒關?

g++ -o facedetect  facedetect.o  -lhighgui -lcv

果然通過! 傻眼...... 那我現在該怎麼辦?

無可奈何, 只好先把某些shared library顯示not found的問題解決

vi /etc/ld.so.conf

新增/usr/local/lib

改完之後也不需要重新編譯或連結

直接ldd就可以發現每個shared library都找到了

結論: 這次真是幾乎毫無結論的測試......


No comments:

Post a Comment