【问题标题】:/usr/bin/ld: cannot find -lRTU_Module Linux / Shared library C code/usr/bin/ld: 找不到 -lRTU_Module Linux / 共享库 C 代码
【发布时间】:2020-05-27 12:42:30
【问题描述】:

我在编译以下代码行时遇到问题:

gcc -o main.c -ldl -lpthread -lRTU_Module main.o

我有以下错误信息:

/usr/bin/ld: cannot find -lRTU_Module
collect2: error: ld returned 1 exit status

当我试图找到我的 .so 的位置时,它会返回:

locate libRTU_Module.so
/home/owasys/workspace/AccelTest/libRTU_Module.so
/home/owasys/workspace/Compiler_gcc-linaro-5.3_patch/files/lib/libRTU_Module.so
/home/owasys/workspace/Compiler_gcc-linaro-5.3_patch/files/lib/libRTU_Module.so.1.0.11
/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/libRTU_Module.so
/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/libRTU_Module.so.0
/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/libRTU_Module.so.0.0.0
/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/libRTU_Module.so.1.0.11

我有一个类似问题的红色倍数的答案,但我没有解决我的问题。

谢谢。

【问题讨论】:

  • 使用-l 意味着您不需要提供lib 前缀或.so 后缀

标签: c linux shared-libraries ld .so


【解决方案1】:

ld 通常会扫描一组默认/配置的目录,通常不知道 /home/a/b/c 之类的自定义内容

应该很容易修复;这行得通吗?

dir=/home/owasys/workspace/Compiler_gcc-linaro-5.3_patch/files/lib
gcc -o main.c -ldl -lpthread -lRTU_Module.so main.o -L $dir

可能需要告诉运行时链接编辑器也在那里搜索,例如将其添加到 gcc cmd-line:

-Wl,-rpath=$dir

【讨论】:

  • 还是不行。我有一个问题,.so 应该放在哪里才能被 ld 命令找到?
  • 大多数目录都应该没问题,你和其他人都可以访问;使用 -L /path/to/dir-Wl,-rpath=/path/to/dir 指定该目录。什么不工作? (上面未指定)。尝试使用strace 运行您的程序,这通常有助于隔离文件、位置、权限等问题。 (注意:前导 - 带有 -rpath,答案已更新)。
猜你喜欢
  • 2013-09-09
  • 2021-05-07
  • 2012-05-17
  • 2019-02-23
  • 2011-07-16
  • 2020-04-14
  • 2012-03-26
  • 2018-12-13
  • 2015-09-22
相关资源
最近更新 更多