Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Линькер не может найти символы. 
:(
    Опции темы
phprus
Дата 27.2.2012, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



Доброго времени суток!

Пытаюсь создать приложение, которое будет полностью переносимым (в файловой системе), следовательно все пути к библиотекам указаны через rpath.

Есть OpenCV, который скомпилирован с поддержкой CUDA 4.0 и путь к CUDA-библиотекам указан через относительный rpath. ldd, показывает, что все зависимые библиотеки успешно находятся. Также на сервере установлена 4.1, пути к которой прописаны в /etc/ld.so.conf.d/.

При попытке скомпилировать приложение, в зависимостях которого оказывается библиотека libopencv_gpu.su возникает ошибка:
Код

~/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so: undefined reference to `nppiAbsDiff_8u_C4R'
~/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so: undefined reference to `nppiAbsDiff_32s_C1R'
collect2: выполнение ld завершилось с кодом возврата 1

При компиляции приложения указывается абсолютный rpath к каталогу ~/opt/icmm/opencv/2.3.1/lib64/.
Похоже, что линькер пытается найти эти символы в системной CUDA 4.1, а не в той, с которой скомпилирована opencv.

Подскажите пожалуйста, как можно решить эту проблему? Ситуация осложняется тем, что я в общем случае не знаю скомпилирован ли OpenCV с поддержкой CUDA и если да, то какой версии.
PM MAIL WWW ICQ   Вверх
boostcoder
Дата 27.2.2012, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



покажи командную строку линкера.

PM WWW   Вверх
phprus
Дата 28.2.2012, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



boostcoder

Строка линькера сгенерирована cmake:

Цитата

Linking CXX executable ppivdt-piv-client
/misc/home/user/soft/bin/cmake -E cmake_link_script CMakeFiles/ppivdt-piv-client.dir/link.txt --verbose=1                                                                                
/usr/bin/c++    -Wall -Wextra -Werror -Wno-long-long -Wno-strict-aliasing -Wno-unused-parameter -Wno-unused-variable -Wno-non-virtual-dtor   -O3 -fomit-frame-pointer   -DNDEBUG   -fno-fast-math -fno-strict-aliasing      -msse  -msse2      -Wl,--export-dynamic CMakeFiles/ppivdt-piv-client.dir/src/client/piv_client.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Application.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Config/Config.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Config/ConfigManager.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/Exception.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/Algorithm.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/Init.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/Config.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/Grid.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/Pass.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/Region.cpp.o CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/ComputingAlgorithm.cpp.o  -o ppivdt-piv-client -rdynamic -L/home/user/opt/icmm/boost/1.49.0/lib64 -L/misc/home/user/opt/icmm/opencv/2.3.1/lib64 -L/misc/home/user/icmm/ppivdt/svn/trunk/build/umt /home/user/opt/icmm/boost/1.49.0/lib64/libboost_program_options-gcc44-mt-1_49-icmm.so /home/user/opt/icmm/boost/1.49.0/lib64/libboost_system-gcc44-mt-1_49-icmm.so libppivdt_client-0_1_0.so.0.1.0 libppivdt_udt-4_10.so.4.10 libppivdt_common-0_1_0.so.0.1.0 /home/user/opt/icmm/boost/1.49.0/lib64/libboost_system-gcc44-mt-1_49-icmm.so /home/user/opt/icmm/boost/1.49.0/lib64/libboost_thread-gcc44-mt-1_49-icmm.so libppivdt_udt-4_10.so.4.10 libppivdt_common-0_1_0.so.0.1.0 -lpthread -lpthread /home/user/opt/icmm/boost/1.49.0/lib64/libboost_system-gcc44-mt-1_49-icmm.so /home/user/opt/icmm/boost/1.49.0/lib64/libboost_thread-gcc44-mt-1_49-icmm.so /home/user/opt/icmm/boost/1.49.0/lib64/libboost_filesystem-gcc44-mt-1_49-icmm.so libppivdt_udt-4_10.so.4.10 -lpthread /home/user/opt/icmm/boost/1.49.0/lib64/libboost_iostreams-gcc44-mt-1_49-icmm.so /home/user/opt/icmm/boost/1.49.0/lib64/libboost_thread-gcc44-mt-1_49-icmm.so /home/user/opt/icmm/boost/1.49.0/lib64/libboost_date_time-gcc44-mt-1_49-icmm.so /home/user/opt/icmm/boost/1.49.0/lib64/libboost_serialization-gcc44-mt-1_49-icmm.so -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lopencv_gpu -lopencv_contrib -lopencv_legacy -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_video -lopencv_highgui -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core -lm -lpthread -Wl,-rpath,/home/user/opt/icmm/boost/1.49.0/lib64:/misc/home/user/opt/icmm/opencv/2.3.1/lib64:/misc/home/user/icmm/ppivdt/svn/trunk/build/umt: 
/misc/home/user/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so: undefined reference to `nppiAbsDiff_8u_C4R'
/misc/home/user/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so: undefined reference to `nppiAbsDiff_32s_C1R'
collect2: выполнение ld завершилось с кодом возврата 1



Это сообщение отредактировал(а) phprus - 29.2.2012, 10:31
PM MAIL WWW ICQ   Вверх
boostcoder
Дата 28.2.2012, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



phprus, последний пост у тебя нормально отображается? у меня он шесть экранов в ширину.

к тому же, командная строка такого объема совершенно нечитаема)
Цитата

/usr/bin/c++ \
   -Wall \
   -Wextra \
   -Werror \
   -Wno-long-long \
   -Wno-strict-aliasing \
   -Wno-unused-parameter \
   -Wno-unused-variable \
   -Wno-non-virtual-dtor \
   -O3 \
   -fomit-frame-pointer \
   -DNDEBUG \
   -fno-fast-math \
   -fno-strict-aliasing \
   -msse \
   -msse2 \
   -Wl,--export-dynamic \
   \
   CMakeFiles/ppivdt-piv-client.dir/src/client/piv_client.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Application.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Config/Config.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Config/ConfigManager.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/Exception.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/Algorithm.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/Init.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/Config.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/Grid.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/Pass.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/Region.cpp.o \
   CMakeFiles/ppivdt-piv-client.dir/src/PIV/Algorithm/CrossCorrelation/ComputingAlgorithm.cpp.o \
   -o ppivdt-piv-client \
   \
   -rdynamic \
   -L/home/user/opt/icmm/boost/1.49.0/lib64 \
   -L/misc/home/user/opt/icmm/opencv/2.3.1/lib64 \
   -L/misc/home/user/icmm/ppivdt/svn/trunk/build/umt \
   \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_program_options-gcc44-mt-1_49-icmm.so \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_system-gcc44-mt-1_49-icmm.so \
   libppivdt_client-0_1_0.so.0.1.0 \
   libppivdt_udt-4_10.so.4.10 \
   libppivdt_common-0_1_0.so.0.1.0 \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_system-gcc44-mt-1_49-icmm.so \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_thread-gcc44-mt-1_49-icmm.so \
   libppivdt_udt-4_10.so.4.10 \
   libppivdt_common-0_1_0.so.0.1.0 \
   -lpthread \
   -lpthread \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_system-gcc44-mt-1_49-icmm.so \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_thread-gcc44-mt-1_49-icmm.so \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_filesystem-gcc44-mt-1_49-icmm.so \
   libppivdt_udt-4_10.so.4.10 \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_iostreams-gcc44-mt-1_49-icmm.so \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_thread-gcc44-mt-1_49-icmm.so \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_date_time-gcc44-mt-1_49-icmm.so \
   /home/user/opt/icmm/boost/1.49.0/lib64/libboost_serialization-gcc44-mt-1_49-icmm.so \
   -lmkl_intel_lp64 \
   -lmkl_sequential \
   -lmkl_core \
   -lopencv_gpu \
   -lopencv_contrib \
   -lopencv_legacy \
   -lopencv_objdetect \
   -lopencv_calib3d \
   -lopencv_features2d \
   -lopencv_video \
   -lopencv_highgui \
   -lopencv_ml \
   -lopencv_imgproc \
   -lopencv_flann \
   -lopencv_core \
   -lm \
   -Wl,-rpath,/home/user/opt/icmm/boost/1.49.0/lib64:/misc/home/user/opt/icmm/opencv/2.3.1/lib64:/misc/home/user/icmm/ppivdt/svn/trunk/build/umt



зы
а что, cлов "нечитаем"/"нечитаема" нет в русском языке? или они как-то иначе пишутся?


Это сообщение отредактировал(а) boostcoder - 28.2.2012, 12:14
PM WWW   Вверх
boostcoder
Дата 28.2.2012, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(phprus @  27.2.2012,  13:28 Найти цитируемый пост)
Похоже, что линькер пытается найти эти символы в системной CUDA 4.1, а не в той, с которой скомпилирована opencv.

а если для теста удалить системную?
PM WWW   Вверх
phprus
Дата 29.2.2012, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



boostcoder
bsa
Упс... Прошу прощения, написал пост и убежал совершенно не посмотрев, как он выглядит.
Был удивлен, что тег code так разъезжается...

Цитата(boostcoder @  28.2.2012,  15:26 Найти цитируемый пост)
а если для теста удалить системную? 

На той системе, где это собирается я не рут, по этому так сделать мне никто не даст, а в тестовом окружении попробую проверить.
PM MAIL WWW ICQ   Вверх
phprus
Дата 29.2.2012, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



А если системной нет вообще, то все еще хуже:
Цитата

/usr/bin/ld: warning: libcudart.so.4, needed by /home/user/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libcufft.so.4, needed by /home/user/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libnpp.so.4, needed by /home/user/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so, not found (try using -rpath or -rpath-link)
/home/user/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so: undefined reference to `nppiWarpAffine_16u_C1R'

... много строк ...

/home/user/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so: undefined reference to `nppiFilter_8u_C4R'
collect2: выполнение ld завершилось с кодом возврата 1


При этом:
Цитата

ldd /home/user/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so
        linux-vdso.so.1 =>  (0x00007fff7ebff000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f39b16bf000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f39b14a3000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f39b129b000)
        libopencv_core.so.2.3 => /home/user/opt/icmm/opencv/2.3.1/lib64/../lib64/libopencv_core.so.2.3 (0x00007f39b08d5000)
        libopencv_imgproc.so.2.3 => /home/user/opt/icmm/opencv/2.3.1/lib64/../lib64/libopencv_imgproc.so.2.3 (0x00007f39b0172000)
        libopencv_objdetect.so.2.3 => /home/user/opt/icmm/opencv/2.3.1/lib64/../lib64/libopencv_objdetect.so.2.3 (0x00007f39afece000)
        libopencv_features2d.so.2.3 => /home/user/opt/icmm/opencv/2.3.1/lib64/../lib64/libopencv_features2d.so.2.3 (0x00007f39afbf8000)
        libopencv_flann.so.2.3 => /home/user/opt/icmm/opencv/2.3.1/lib64/../lib64/libopencv_flann.so.2.3 (0x00007f39af98f000)
        libopencv_calib3d.so.2.3 => /home/user/opt/icmm/opencv/2.3.1/lib64/../lib64/libopencv_calib3d.so.2.3 (0x00007f39af6f5000)
        libcudart.so.4 => /home/user/opt/icmm/opencv/2.3.1/lib64/../../../nvidia/cuda/4.0/lib64/libcudart.so.4 (0x00007f39af4a3000)
        libcufft.so.4 => /home/user/opt/icmm/opencv/2.3.1/lib64/../../../nvidia/cuda/4.0/lib64/libcufft.so.4 (0x00007f39a9eb6000)
        libnpp.so.4 => /home/user/opt/icmm/opencv/2.3.1/lib64/../../../nvidia/cuda/4.0/lib64/libnpp.so.4 (0x00007f39a719b000)
        libopencv_highgui.so.2.3 => /home/user/opt/icmm/opencv/2.3.1/lib64/../lib64/libopencv_highgui.so.2.3 (0x00007f39a6e71000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f39a6bed000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f39a68e6000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f39a66cf000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f39a632e000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003ef1000000)

Из чего можно сделать вывод, что библиотеки успешно находятся библиотекой libopencv_gpu.so. Необходимо отметить, что библиотеки cuda не содержат в себе RPATH.

PM MAIL WWW ICQ   Вверх
boostcoder
Дата 29.2.2012, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(phprus @  27.2.2012,  13:28 Найти цитируемый пост)
~/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so: undefined reference to `nppiAbsDiff_8u_C4R'
~/opt/icmm/opencv/2.3.1/lib64/libopencv_gpu.so: undefined reference to `nppiAbsDiff_32s_C1R'

так эти символы, в какой библиотеке присутствуют? в системной, или в той другой?
PM WWW   Вверх
phprus
Дата 29.2.2012, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



Цитата(boostcoder @  29.2.2012,  16:05 Найти цитируемый пост)
так эти символы, в какой библиотеке присутствуют? в системной, или в той другой? 

Эти символы только в кастомной (4.0). ABI немножко поломалось в версиях 4.0/ 4.1.

Но я пока не очень понимаю почему линькер проверяет зависимости используемых библиотек и при этом похоже не смотрит на их RPATH...
PM MAIL WWW ICQ   Вверх
phprus
Дата 3.3.2012, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



Сделал workaround на базе добавления в -rpath-link всех возможных каталогов проекта, в которых есть .so файлы. Теперь все компилируется и работает так, как и задумано.

Осталось только понять, почему линькер отказывался использовать RPATH библиотек для поиска их зависимостей...
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1142 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.