【问题标题】:skipping incompatible /lib/libpthread.so.0 when searching for /lib/libpthread.so.0搜索 /lib/libpthread.so.0 时跳过不兼容的 /lib/libpthread.so.0
【发布时间】:2020-12-14 17:30:48
【问题描述】:

我正在构建一个程序并尝试构建 cmake 文件。我正在使用一个 conda 环境,我安装了一个新的 gcc 和 cmake,因为系统没有它,但是我得到了这个错误。

 /usr/bin/ld: skipping incompatible /lib/libpthread.so.0 when searching for /lib/libpthread.so.0 
 /usr/bin/ld: cannot find /lib/libpthread.so.0
 /usr/bin/ld: skipping incompatible /usr/lib/libpthread_nonshared.a when searching for/usr/lib/libpthread_nonshared.a
 /usr/bin/ld: cannot find /usr/lib/libpthread_nonshared.a 
 collect2: error: ld returned 1 exit status

【问题讨论】:

  • 你能介绍一下目标架构吗?命令file /lib/libpthread.so.0的输出是什么?
  • 它是 x86_64,命令说 /lib/libpthread.so.0: symbolic link to `libpthread-2.17.so'
  • 那么file /lib/libpthread-2.17.so ?
  • /lib/libpthread-2.17.so:ELF 32 位 LSB 共享对象,Intel 80386,版本 1 (SYSV),动态链接(使用共享库),BuildID[sha1]=bc21c03f20b151a923a3689400386ba342322857,用于GNU/Linux 2.6.32,未剥离
  • 仅供参考,库的版本似乎很旧,我有 libpthread-2.29。这没有问题。你可以在旧系统上做很多事情,但你有点靠自己。希望它不会太令人沮丧。

标签: linux cmake anaconda lib


【解决方案1】:

在comment-communication中发现,编译目标和本地库的架构不匹配。

要么

  • 安装 libpthread 的 64 位版本(= 架构 amd64 或 x86_64)

  • 如果已安装(/lib64/libpthread.so.0 是否存在?),则 cmake 会找到错误的库。必须在某个地方为此设置一些设置

  • 将 cmake 编译目标设置为 32 位(i368 / i586 / i686 编辑:在 gcc 中这与 -m32 一起使用)您生成的程序将在 所有 x86 系统上运行,因此 32 位和 64位[编辑:如果所有库都存在]!但是您的内存限制

【讨论】:

  • 是的 /lib64/libpthread.so.0 确实存在于 /usr/local/lib64 下。 export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH 有帮助吗?我已经尝试过了,但是没有用。你知道可以做哪些改变吗?
  • LD_LIBRARY_PATH 用于运行时。您想链接它,因此必须在链接时找到它。 cmake 调用 gcc。如果您有兴趣:See how gcc is controlled。但在我看来,你的 cmake 似乎走错了路。我不是 cmake 专家,但我知道有一些有用的工具,甚至是 GUI 工具。有时从干净的代码开始,export LDFLAGS=-L/usr/local/lib64,然后构建,例如。 G。 automakeautoconf./configuremakecmake
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
相关资源
最近更新 更多