Search code examples
gccshared-librariesld

ld cannot find shared library even with -L specified


I'm trying to compile a C file against a shared library at a specific location (/home/user/cuda_sync_analyzer-install/lib/libInsertTimingInstr.so), but ld cannot seem to find it -

$ 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

I also tried

$ 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

as well as setting 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

The file libInsertTimingInstr.so is present in the directory -

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

Solution

  • but ld cannot seem to find it

    This command line: gcc ... -lInsertTimingInstr.so ... asks the linker to link against libInsertTimingInstr.so.a or libInsertTimingInstr.so.so, neither of which exists.

    You want: gcc ... -lInsertTimingInstr ... (i.e. drop the lib prefix and the .so suffix).

    Alternatively, you could do this: gcc ... /home/user/cuda_sync_analyzer-install/lib/libInsertTimingInstr.so ...