Как исправить сломанные пути Линкера?

Я пытаюсь создать репо на своем Ubuntu 16.04 из источника, и все идет нормально, пока не достигнет файлов, связанных с OpenCV.

Я получаю следующую ошибку:

/usr/bin/ld: cannot find -lIlmImf /usr/bin/ld: cannot find -llibjasper /usr/bin/ld: cannot find -llibtiff /usr/bin/ld: cannot find -llibpng /usr/bin/ld: cannot find -llibjpeg /usr/bin/ld: cannot find -lzlib collect2: error: ld returned 1 exit status Makefile:305: recipe for target 'lib/libmxnet.so' failed make: *** [lib/libmxnet.so] Error 1

Итак, я попытался проверить, что делает компоновщик. Я набрал

ld - llibjpeg --verbose

и получил

attempt to open //usr/local/lib/x86_64-linux-gnu/liblibjpeg.so failed attempt to open //usr/local/lib/x86_64-linux-gnu/liblibjpeg.a failed attempt to open //lib/x86_64-linux-gnu/liblibjpeg.so failed attempt to open //lib/x86_64-linux-gnu/liblibjpeg.a failed attempt to open //usr/lib/x86_64-linux-gnu/liblibjpeg.so failed attempt to open //usr/lib/x86_64-linux-gnu/liblibjpeg.a failed attempt to open //usr/local/lib64/liblibjpeg.so failed attempt to open //usr/local/lib64/liblibjpeg.a failed attempt to open //lib64/liblibjpeg.so failed attempt to open //lib64/liblibjpeg.a failed attempt to open //usr/lib64/liblibjpeg.so failed attempt to open //usr/lib64/liblibjpeg.a failed attempt to open //usr/local/lib/liblibjpeg.so failed attempt to open //usr/local/lib/liblibjpeg.a failed attempt to open //lib/liblibjpeg.so failed attempt to open //lib/liblibjpeg.a failed attempt to open //usr/lib/liblibjpeg.so failed attempt to open //usr/lib/liblibjpeg.a failed attempt to open //usr/x86_64-linux-gnu/lib64/liblibjpeg.so failed attempt to open //usr/x86_64-linux-gnu/lib64/liblibjpeg.a failed attempt to open //usr/x86_64-linux-gnu/lib/liblibjpeg.so failed attempt to open //usr/x86_64-linux-gnu/lib/liblibjpeg.a failed ld: cannot find -llibjpeg

Как видим, компоновщик не ищет нужный файл! С другой стороны, если я набираю

ld - ljpeg --verbose

, я вижу это:

attempt to open //usr/local/lib/x86_64-linux-gnu/libjpeg.so failed attempt to open //usr/local/lib/x86_64-linux-gnu/libjpeg.a failed attempt to open //lib/x86_64-linux-gnu/libjpeg.so failed attempt to open //lib/x86_64-linux-gnu/libjpeg.a failed attempt to open //usr/lib/x86_64-linux-gnu/libjpeg.so succeeded -ljpeg (//usr/lib/x86_64-linux-gnu/libjpeg.so) libc.so.6 needed by //usr/lib/x86_64-linux-gnu/libjpeg.so found libc.so.6 at //lib/x86_64-linux-gnu/libc.so.6 ld-linux-x86-64.so.2 needed by //lib/x86_64-linux-gnu/libc.so.6 found ld-linux-x86-64.so.2 at //lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ld: warning: cannot find entry symbol _start; not setting start address

Итак, библиотека libjpeg существует, компоновщик просто ищет неправильный файл. [ ! d6]

В make-файле у меня есть

ifeq ($(USE_OPENCV), 1) CFLAGS += -DMXNET_USE_OPENCV=1 $(shell pkg-config --cflags opencv) LDFLAGS += $(filter-out -lopencv_ts, $(shell pkg-config --libs opencv)) BIN += bin/im2rec

И пути, указанные сценариями оболочки pkg-config --cflags opencv и pkg-config --libs opencv, верны.

Я бы благодарен за любую помощь с исправлением.

EDIT: Я запускаю make uninstall в исходной папке OpenCV. После этого сборка прошла успешно. Очень странно, похоже, что OpenCV испортил символические ссылки. Я играл с файлами opencv.pc раньше, и пути отсутствовали или были неправильными.

1
задан 13 February 2018 в 01:58

2 ответа

Я не могу понять, где у вас проблемы. Я скомпилировал его успешно (даже без sudo apt-get build-dep libopencv-dev):

wget https://github.com/opencv/opencv/archive/2.4.13.5.zip unzip 2.4.13.5.zip cd opencv-2.4.13.5 mkdir build cd build cmake .. make -j16 sudo make install

И затем pkg-config --libs opencv показывает следующее:

-L / usr / local / lib -lopencv_calib3d - lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lrt -lpthread -lm -ldl

и pkg-config --cflags opencv

-L / usr / local / lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lrt -lpthread -lm -ldl

0
ответ дан 17 July 2018 в 21:01

Я не могу понять, где у вас проблемы. Я скомпилировал его успешно (даже без sudo apt-get build-dep libopencv-dev):

wget https://github.com/opencv/opencv/archive/2.4.13.5.zip unzip 2.4.13.5.zip cd opencv-2.4.13.5 mkdir build cd build cmake .. make -j16 sudo make install

И затем pkg-config --libs opencv показывает следующее:

-L / usr / local / lib -lopencv_calib3d - lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lrt -lpthread -lm -ldl

и pkg-config --cflags opencv

-L / usr / local / lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lrt -lpthread -lm -ldl

0
ответ дан 23 July 2018 в 21:41
  • 1
    Проблема в том, что я установил OpenCV как сборку из источника, а не из репо. Возможно ли, что, пройдя таким образом, система не обновила LD_LIBRARY_PATH? – mathdonk 12 February 2018 в 21:25
  • 2
    Эта команда установит все библиотеки и заголовки, которые необходимы для успешной компиляции. Откуда вы загрузили исходный код OpenCV? – N0rbert 12 February 2018 в 21:39
  • 3
    Я получил его от GitHub: ( github.com/opencv/opencv/archive/2.4.13.5.zip ). Впоследствии (после того, как я получил ошибку) я также установил пакет libopencv-dev через apt-get, так что теперь у меня есть два ... – mathdonk 12 February 2018 в 21:41
  • 4
    Проблема в том, что имена этих нескольких каталогов, которые ld не удалось найти, отображаются некорректно pkg-config. И я не знаю, как это исправить. – mathdonk 12 February 2018 в 22:22
  • 5
    Главное отличие в том, что у меня есть графический процессор Intel. Может быть, Nvidia CUDA изменяет каталоги и процесс компиляции в вашей системе. На моем оборудовании я не могу воспроизвести это. – N0rbert 12 February 2018 в 22:34

Другие вопросы по тегам:

Похожие вопросы: