微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

编译和链接Debian 64位上的32位应用程序

我目前正在试图编译和链接我的Debian 64位上的32位应用程序,但在链接时失败。

我正在使用(在我的Makefile中)编译的命令是:

gcc -Os -m32 -Wall -g -c $< -o $@

这似乎工作。

在Windows上增加堆栈大小(GCC)

链接到dynamic共享库时,ld做了什么?

与旧版本的libstdc ++链接

如何构build我的Linux c ++应用程序以链接到旧版本的libc?

如何在Windows下使用PyQt(和sip)编译(和链接python模块

然后我用下面的命令链接

gcc -m32 -lcurses $^ -o $@

这会失败,并提供以下错误

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libcurses.so when searching for -lcurses /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libcurses.a when searching for -lcurses /usr/bin/ld: skipping incompatible /usr/lib/libcurses.so when searching for -lcurses /usr/bin/ld: skipping incompatible /usr/lib/libcurses.a when searching for -lcurses /usr/bin/ld: cannot find -lcurses collect2: ld returned 1 exit status

我到目前为止所尝试的(我在网上其他地方find的常用解决scheme)是:

安装gcc-multilib

安装lib32ncurses5和lib32ncurses6dev

链接命令中添加-L/usr/lib32选项

可悲的是,迄今为止这些工作都没有奏效。 任何帮助将非常感激,因为我没有想法。 我最后的手段是使用32位系统,但是如果可能的话,我想避免这种情况。

一个共享库静态链接到我的共享库

如何在Linux / gcc上创build一个与pthreads和libstdc ++静态链接的共享对象?

如何告诉link.exe使用wmain作为入口点。 LNK2019:函数__tmainCRTStartup中引用的未parsing的外部符号main

静态/dynamic运行时链接

如何在链接时指定段的基地址,或者链接后如何指定段的基地址?

有两个问题:

您的链接命令不正确:链接行上的库的顺序很重要 。 该命令应该是: gcc -m32 $^ -o $@ -lcurses

既然你想链接ncurses ,使最后一个参数-lncurses 。

消息显示gcc没有找到ncurse库的32位。

一个快速解决方案:看我的机器(Ubuntu 11.10),我认为应该是

gcc -m32 -lncurses $^ -o $@ -v

这个库实际上位于/lib32/libncurses.so.5.9。

一般来说,如果遇到问题,请尝试。

gcc -m32 -lcurses $^ -o $@ -v

它会打印出很多东西。

查找类似于-L的参数,并尝试在目录中查找库文件(libfoo.so或libfoo.a)。

您可能需要lib32ncurses5-dev包或类似的东西,为ncurses提供32位变体开发包。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐