2011-07-07 41 views
4

我想与在x64的Ubuntu 11.04纳蒂独角鲸的x86共享库链接,但我得到了以下信息:在Linux的x64 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 

任何想法?

编辑:

/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 

运行找到我发现的libstdC++所以在以下位置: 改变-mi386linux标志-m32我得到这个错误后

/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 
+2

可以添加'file -k ./bin/libshared.so main.o'的输出吗? – osgx

+0

@Ohad,你看到osgx的问题了吗?请粘贴该命令的输出。 – bdonlan

+0

哎呀错过了这句话,谢谢你@bdonlan提醒。什么解决了使用-m32和安装multilib的问题。 BTW文件-k的输出是“main.o:ELF 32位LSB可重定位,英特尔80386,版本1(SYSV),没有剥离”我会记住那个命令下一次我会遇到这样的问题,所以谢谢:) –

回答

3

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

+0

谢谢,这导致了一个不同的错误看到我的编辑问题。输出有点不同,所以也许会导致真正的问题。 –

0

绝对使用“-m32”,并且尽可能早地在你的build命令中加入“-L/usr/lib32”。