«/ Usr / bin / ld: не могу найти -lcudart»

13

Я новичок в Ubuntu и использую Ubuntu 14.04 64-bit. Я хочу, чтобы makeпроект, который использует, cudaи opencvя получил следующую ошибку при запускеcmake . && make

Linking CXX executable ground_estimation
/usr/bin/ld: cannot find -lcudart
collect2: error: ld returned 1 exit status
make[2]: *** [ground_estimation] Error 1
make[1]: *** [CMakeFiles/ground_estimation.dir/all] Error 2
make: *** [all] Error 2

Это вывод ld -lcudart --verbose

attempt to open /usr/x86_64-linux-gnu/lib64/libcudart.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libcudart.a failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libcudart.so failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libcudart.a failed
attempt to open //usr/local/lib64/libcudart.so failed
attempt to open //usr/local/lib64/libcudart.a failed
attempt to open //lib/x86_64-linux-gnu/libcudart.so failed
attempt to open //lib/x86_64-linux-gnu/libcudart.a failed
attempt to open //lib64/libcudart.so failed
attempt to open //lib64/libcudart.a failed
attempt to open //usr/lib/x86_64-linux-gnu/libcudart.so failed
attempt to open //usr/lib/x86_64-linux-gnu/libcudart.a failed
attempt to open //usr/lib64/libcudart.so failed
attempt to open //usr/lib64/libcudart.a failed
attempt to open //usr/local/lib/libcudart.so failed
attempt to open //usr/local/lib/libcudart.a failed
attempt to open //lib/libcudart.so failed
attempt to open //lib/libcudart.a failed
attempt to open //usr/lib/libcudart.so failed
attempt to open //usr/lib/libcudart.a failed

libcudartсуществует в, /usr/local/cuda/lib64и я также добавил в путь к библиотеке:

echo $LD_LIBRARY_PATH
/usr/lib/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib:

Это вывод ls /usr/local/cuda/lib64:

libcublas_device.a   libcufftw.so.6.0.37    libnppi.so.6.0
libcublas.so         libcuinj64.so          libnppi.so.6.0.37
libcublas.so.6.0     libcuinj64.so.6.0      libnpps.so
libcublas.so.6.0.37  libcuinj64.so.6.0.37   libnpps.so.6.0
libcudadevrt.a       libcurand.so           libnpps.so.6.0.37
libcudart.so         libcurand.so.6.0       libnvblas.so
libcudart.so.6.0     libcurand.so.6.0.37    libnvblas.so.6.0
libcudart.so.6.0.37  libcusparse.so         libnvblas.so.6.0.37
libcudart_static.a   libcusparse.so.6.0     libnvToolsExt.so
libcufft.so          libcusparse.so.6.0.37  libnvToolsExt.so.1
libcufft.so.6.0      libnppc.so             libnvToolsExt.so.1.0.0
libcufft.so.6.0.37   libnppc.so.6.0         libOpenCL.so
libcufftw.so         libnppc.so.6.0.37      libOpenCL.so.1
libcufftw.so.6.0     libnppi.so

Что я должен сделать этот ldпоиск в /usr/local/cuda/lib64пути, чтобы найти libcudart?

Сыпь
источник
можешь пожалуйста ls /usr/local/cuda/lib64?
AlexGreg
Тот же вопрос случился и со мной. Ссылка из статьи: [Debian компилирует примеры OpenCV с IPP: / usr / bin / ld: невозможно найти -llibsvml.so collect2: error: ld вернул 1 состояние выхода.] [1] [1]: stackoverflow.com/questions/ 24234961 /…
hellomzhxlp

Ответы:

22

Сделайте символическую ссылку, libcudaгде ldищет его.

sudo ln -s /usr/local/cuda/lib64/libcudart.so /usr/lib/libcudart.so
AlexGreg
источник
11

LD_LIBRARY_PATHиспользуется для изменения поведения ldconfigсоответствующих инструментов при поиске библиотек во время выполнения.

Инструмент ldкомпоновщика не использует эту переменную. Если вы хотите использовать библиотеку, расположенную в нестандартном каталоге, вы должны использовать -Lпараметр команды, например:

ld -lcuda -L/usr/local/cuda/lib64

Если вы скачали существующий проект и не знаете, как изменить существующие Makefile (ы), не нарушая всю компиляцию, вы можете запустить make следующим образом:

export LDFLAGS=-L/usr/local/cuda/lib64
make

Переменная LDFLAGS (которая также может быть определена в Makefile), используется для передачи определенных аргументов компоновщику ( ld) при запуске средствами компиляции.

Benoit
источник
1
Я получил, ld: warning: cannot find entry symbol _start; not setting start addressкогда бегуld -lcuda -L/usr/local/cuda/lib64
Arash
@Arash: вы установили версию libcuda, запрошенную частью, которую вы пытаетесь скомпилировать?
Бенуа
та же проблема, что и у @Arash, и да, у меня правильная версия libcuda
Мохсин Бухари
2

Вы можете создавать ссылки вместо добавления путей:

ln -s /usr/local/cuda/lib64/libcudart.so /usr/local/lib/
ln -s /usr/local/cuda/lib64/libcudart.a /usr/local/lib/
хаос
источник
у меня нет / usr / local / lib64 /, у меня есть / usr / local / lib /
Arash
1

Я исправил это! Перейдите в свой make-файл и измените

/usr/local/cuda/

в

/usr/local/cuda-7.0

(если это то, что вы получили)

У меня сработало

Энтони Саввиди
источник
0

решаемая

git clone https://github.com/inducer/pycuda.git
cd pycuda
sudo configure --cuda-root=/usr/lib/cuda-10.1

sudo ln -s /usr/lib/cuda-10.1/targets/x86_64-linux/include src/cpp/

ИЛИ скопируйте все файлы заголовков из /usr/lib/cuda-10.1/targets/x86_64-linux/include в / src / cpp /

У меня это работало на Pop-OS 19.10

Ганшьям Чандра
источник