"/ Usr / bin / ld: не вдається знайти -lcudart"


13

Я новачок у Ubuntu та використовую 64-розрядний Ubuntu 14.04. Я хочу, щоб 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 collection2: помилка: 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

11

LD_LIBRARY_PATHвикористовується для зміни поведінки ldconfigвідповідних інструментів під час пошуку бібліотек під час виконання.

Інструмент ldзв’язувача не використовує цю змінну. Якщо ви хочете використовувати бібліотеку, розташовану в нестандартному каталозі, вам потрібно скористатися -Lпараметром команди, наприклад:

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

Якщо ви завантажили і наявний проект і не знаєте, як змінити існуючий файл Makefile (файлів), не порушуючи всієї компіляції, можна запустити зробити наступним чином:

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

Змінна LDFLAGS (яка також може бути визначена в Makefile) використовується для передачі конкретних аргументів до linker ( ld), коли запускається в результаті компіляції.


1
Я потрапив, ld: warning: cannot find entry symbol _start; not setting start addressколи бігавld -lcuda -L/usr/local/cuda/lib64
Араш,

@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

Я це виправив! Перейдіть до свого файлу і змініть

/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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.