ld не может найти общую библиотеку, даже если указан -L - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь скомпилировать файл C для общей библиотеки в указанном c месте (/home/user/cuda_sync_analyzer-install/lib/libInsertTimingInstr.so), но ld не может его найти -

$ gcc -g -I/home/user/tools/cuda_sync_analyzer/src/InsertTimingInstr \
         -L/home/user/cuda_sync_analyzer-install/lib/ \
         callback.c -o callback -lInsertTimingInstr.so
/usr/bin/ld: cannot find -lInsertTimingInstr.so
collect2: error: ld returned 1 exit status

Я также пытался

$ gcc -g -I/home/user/tools/cuda_sync_analyzer/src/InsertTimingInstr \
         -L/home/user/cuda_sync_analyzer-install/lib/ \
         -lInsertTimingInstr.so callback.c -o callback
/usr/bin/ld: cannot find -lInsertTimingInstr.so
collect2: error: ld returned 1 exit status

, а также настройки LD_LIBRARY_PATH

$ export LD_LIBRARY_PATH=/home/user/cuda_sync_analyzer-install/lib/
$ gcc -g -I/home/user/tools/cuda_sync_analyzer/src/InsertTimingInstr \
         callback.c -o callback -lInsertTimingInstr.so
/usr/bin/ld: cannot find -lInsertTimingInstr.so
collect2: error: ld returned 1 exit status

Файл libInsertTimingInstr.so присутствует в каталоге -

$ ls -l /home/user/cuda_sync_analyzer-install/lib/ | grep Timing
-rw-r--r-- 1 user user   51992 Mar 18 18:04 libInsertTimingInstr.so

1 Ответ

1 голос
/ 19 марта 2020

, но ld не может его найти

Эта командная строка: gcc ... -lInsertTimingInstr.so ... просит компоновщик связываться с libInsertTimingInstr.so.a или libInsertTimingInstr.so.so, ни из которых существует.

Вы хотите: gcc ... -lInsertTimingInstr ... (т.е. удалить префикс lib и суффикс .so).

В качестве альтернативы, вы можете сделать это : gcc ... /home/user/cuda_sync_analyzer-install/lib/libInsertTimingInstr.so ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...