【问题标题】:sys/socket.h fatal error trying to compile 32 bit library on 64 bit Linux platformsys/socket.h 尝试在 64 位 Linux 平台上编译 32 位库时出现致命错误
【发布时间】:2016-03-03 06:58:35
【问题描述】:

我使用 Ubuntu 15.10 64 位。 gcc-5-multilib、g++-5-multilib、libc6-i386、内核头文件和所有构建工具链都已安装。当我尝试编译 32 位库(适用于 linux)时:

gcc -m32 -fPIC -shared -Wl,-soname,mylib.so -o mylib.so mylib.c

我收到一个错误:

/usr/include/bits/socket.h:345:24: fatal error: asm/socket.h: No such file or directory

如何在 64 位上为 32 位 linux 编译带有 #include <sys/socket.h> 的代码?

【问题讨论】:

标签: c linux


【解决方案1】:

需要提供asm的路径。只需像这样检查路径和链接。根据系统路径可能会有所不同。大多数时候下载gcc-multilib可以解决这个问题。

$cd /usr/include
$sudo ln -s asm-generic/ asm

$cd /usr/include
$sudo ln -s x86_64-linux-gnu/asm asm

【讨论】:

  • @alk 我认为他正面临路径问题。它可能会解决问题。
  • 这是一个cross编译问题。例如,我怀疑 x64 汇编器 sn-ps 是否有助于编译 32 位程序
  • @Rocoder 它可以编译并且看起来可以工作,但我不确定它是否工作正常
  • 安装 32 位库后可能会工作,需要提及完整路径。
  • @Rocoder 我已经安装了 gcc-5-multilib。我无法安装 gcc-multilib,它将删除所有交叉编译器。但是有了sudo ln -s x86_64-linux-gnu/asm asm,我已经编译了这个库。它可以链接到我的系统上的 32 位应用程序并做工作人员。可能在真正的 32 位上它不会工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
相关资源
最近更新 更多