У меня есть следующий Makefile для проектов с использованием opencv
CFLAGS = 'pkg-config --cflags opencv'
LIBS = 'pkg-config --libs opencv'
% : %.cpp
g++ $(CFLAGS) -o $@ $< $(LIBS)
До недавнего времени это работало нормально. Теперь я получаю следующие ошибки:
/usr/bin/ld: cannot find -lcufft
/usr/bin/ld: cannot find -lnpps
/usr/bin/ld: cannot find -lnppi
/usr/bin/ld: cannot find -lnppc
/usr/bin/ld: cannot find -lcudart
pkg-config --libs opencv
выходы pkg-config --libs opencv
:
/usr/local/lib/libopencv_calib3d.so
/usr/local/lib/libopencv_contrib.so
/usr/local/lib/libopencv_core.so
/usr/local/lib/libopencv_features2d.so
/usr/local/lib/libopencv_flann.so
/usr/local/lib/libopencv_gpu.so
/usr/local/lib/libopencv_highgui.so
/usr/local/lib/libopencv_imgproc.so
/usr/local/lib/libopencv_legacy.so
/usr/local/lib/libopencv_ml.so
/usr/local/lib/libopencv_nonfree.so
/usr/local/lib/libopencv_objdetect.so
/usr/local/lib/libopencv_ocl.so
/usr/local/lib/libopencv_photo.so
/usr/local/lib/libopencv_stitching.so
/usr/local/lib/libopencv_superres.so
/usr/local/lib/libopencv_ts.a
/usr/local/lib/libopencv_video.so
/usr/local/lib/libopencv_videostab.so
/usr/lib/x86_64-linux-gnu/libXext.so
/usr/lib/x86_64-linux-gnu/libX11.so
/usr/lib/x86_64-linux-gnu/libICE.so
/usr/lib/x86_64-linux-gnu/libSM.so
/usr/lib/libGL.so
/usr/lib/x86_64-linux-gnu/libGLU.so
-lcufft -lnpps -lnppi -lnppc -lcudart -ltbb -lrt -lpthread -lm -ldl
Я экспортировал путь библиотеки cuda в LD_LIBRARY_PATH
:
echo $LD_LIBRARY_PATH
/usr/local/cuda-5.5/lib64
Этот путь действительно содержит библиотеки:
ls $LD_LIBRARY_PATH
libcublas_device.a libcudart.so.5.0 libcufftw.so libcurand.so.5.5 libnppc.so.5.5.22 libnvToolsExt.so
libcublas.so libcudart.so.5.5 libcufftw.so.5.5 libcurand.so.5.5.22 libnppi.so libnvToolsExt.so.1
libcublas.so.5.0 libcudart.so.5.5.22 libcufftw.so.5.5.22 libcusparse.so libnppi.so.5.5 libnvToolsExt.so.1.0.0
libcublas.so.5.5 libcudart_static.a libcuinj64.so libcusparse.so.5.5 libnppi.so.5.5.22
libcublas.so.5.5.22 libcufft.so libcuinj64.so.5.5 libcusparse.so.5.5.22 libnpps.so
libcudadevrt.a libcufft.so.5.5 libcuinj64.so.5.5.22 libnppc.so libnpps.so.5.5
libcudart.so libcufft.so.5.5.22 libcurand.so libnppc.so.5.5 libnpps.so.5.5.22
Но я все еще получаю ошибки. Я запускаю opencv 2.4.9 и cuda 5.5. Что я забываю?
Я теперь сделал это: g++ -L/usr/local/cuda-5.5/lib64 pkg-config --cflags opencv -o writeFramesMainSimple writeFramesMainSimple.cpp pkg-config --Libs opencv
и он сработает!
LD_LIBRARY_PATH
предназначен для выполнения. Для компиляции вам нужно использовать LIBRARY_PATH
. Либо вы экспортируете /usr/local/cuda-5.5/lib64
в LIBRARY_PATH
либо добавили путь к LIBS
в Makefile:
LIBS += -L/usr/local/cuda-5.5/lib64
/usr/local/cuda-5.5/lib64
в LIBRARY_PATH
. Теперь я получаю /usr/bin/ld: skipping incompatible /usr/local/cuda-5.5/lib64/../lib/libcufft.so when searching for -lcufft /usr/bin/ld: skipping incompatible /usr/local/cuda-5.5/lib64/../lib/libnpps.so when searching for -lnpps /usr/bin/ld: skipping incompatible /usr/local/cuda-5.5/lib64/../lib/libnppi.so when searching for -lnppi /usr/bin/ld: skipping incompatible /usr/local/cuda-5.5/lib64/../lib/libnppc.so when searching for -lnppc /usr/bin/ld: skipping incompatible /usr/local/cuda-5.5/lib64/../lib/libcudart.so when searching for -lcudart
-L
? Может быть, здесь есть ответ stackoverflow.com/questions/1904990/…g++ -L /usr/local/cuda-5.5/lib64
pkg-config --cflags opencv
-o writeFramesMainSimple writeFramesMainSimple.cpp
pkg-config --libs opencv
и это сработало! Я до сих пор не понимаю, почему он вообще перестал работать, поскольку это именно то, что находится вLD_LIBRARY_PATH
. По вашей ссылке это должно нормально работать ...