【问题标题】:Linking with x86 shared library on Linux x64在 Linux x64 上与 x86 共享库链接
【发布时间】:2011-07-07 12:07:49
【问题描述】:

我正在尝试与 x64 Ubuntu 11.04 Natty Narwhal 上的 x86 共享库链接,但收到以下消息:

/usr/bin/ld: skipping incompatible ./bin/libshared.so when searching for -lshared
/usr/bin/ld: cannot find -lshared

一些细节:
共享库名称为 libshared.so
共享库是在 x86 操作系统上构建的。
我已经安装了 lib32stdc++6。
生成文件如下所示:

test: main.o
    g++ -mi386linux -L./bin -lshared main.o -o test

main.o: main.cpp
    g++ -m32 -c main.cpp -o main.o

有什么想法吗?

编辑: 将 -mi386linux 标志更改为 -m32 后,出现此错误:

/usr/bin/ld: cannot find -lshared  
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status

运行 locate 我在以下地方找到了 libstdc++.so:

/usr/lib/x86_64-linux-gnu/libstdc++.so.6  
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.14  
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5/libstdc++.so  
/usr/lib32/libstdc++.so.6  
/usr/lib32/libstdc++.so.6.0.14

【问题讨论】:

  • 可以添加file -k ./bin/libshared.so main.o的输出吗?
  • @Ohad,你看到 osgx 的问题了吗?请粘贴该命令的输出。
  • 哎呀错过了那句话感谢@bdonlan 的提醒。是什么解决了使用 -m32 和安装 multilib 的问题。顺便说一句,文件 -k 的输出是“main.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped” 下次遇到此类问题时我会记住该命令,非常感谢:)

标签: linux linker 64-bit x86-64


【解决方案1】:

我不确定-mi386linux 应该是什么,但如果你在链接行上用-m32 替换它,那么我怀疑这会起作用。

【讨论】:

  • 谢谢,这导致了另一个错误,请参阅我对问题的编辑。输出有点不同,所以可能会导致真正的问题。
【解决方案2】:

一定要使用“-m32”,而且一定要尽早在你的构建命令中加入“-L/usr/lib32”。

【讨论】:

    猜你喜欢
    • 2013-10-25
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2016-01-02
    • 2023-03-25
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多