【问题标题】:ld cannot find shared library even with -L specified即使指定了 -L,ld 也找不到共享库
【发布时间】:2020-03-19 00:41:24
【问题描述】:

我正在尝试针对特定位置 (/home/user/cuda_sync_analyzer-install/lib/libInsertTimingInstr.so) 的共享库编译 C 文件,但 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

【问题讨论】:

    标签: gcc shared-libraries ld


    【解决方案1】:

    但 ld 似乎找不到它

    此命令行:gcc ... -lInsertTimingInstr.so ... 要求链接器链接到 libInsertTimingInstr.so.a libInsertTimingInstr.so.so,两者都不存在。

    你想要:gcc ... -lInsertTimingInstr ...(即去掉lib前缀.so后缀)。

    或者,您可以这样做:gcc ... /home/user/cuda_sync_analyzer-install/lib/libInsertTimingInstr.so ...

    【讨论】:

    • 谢谢!我完全忘记了在搜索库时会在末尾自动添加“.so”。
    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2015-10-22
    • 2013-09-09
    • 2019-04-26
    相关资源
    最近更新 更多