64位Debian平台构建32位程序链接阶段报找不到-lcrypt错误
问题原因
gcc-multilib、g++-multilib 只提供64位Debian下编译32位程序的基础工具链和核心C/C++库依赖,不会默认附带32位版本的libcrypt链接库。
报错中的skipping incompatible是链接器搜索到了/usr/lib/x86_64-linux-gnu/路径下的64位libcrypt文件,架构不匹配无法用于32位链接,遍历完所有搜索路径找不到符合i386架构的libcrypt时,就会抛出cannot find -lcrypt错误。
解决步骤
- 首先确认系统已经开启i386架构软件源支持,执行命令:
sudo dpkg --add-architecture i386 sudo apt update - 安装32位版本的libcrypt开发依赖:
如果是Debian 10(Buster)及更早版本,# Debian 11(Bullseye)及以上版本执行 sudo apt install libcrypt1:i386 libcrypt-dev:i386libcrypt还未从glibc源码包中拆分,直接执行:sudo apt install libc6-dev:i386 - 验证库文件是否安装到位,执行:
终端输出包含ls /usr/lib/i386-linux-gnu/libcrypt.*libcrypt.so软链和对应静态/动态库文件即为安装成功。 - 重新执行原编译命令即可,编译时保持携带
-m32参数,链接器会自动匹配i386架构的库搜索路径,不需要手动添加-L参数指定库位置。
注意事项
不要手动复制、软链x86_64路径下的libcrypt文件到i386库目录,不同架构的二进制文件无法混用,这类操作会触发更隐蔽的链接错误或运行时段错误。所有32位依赖都必须通过apt安装对应:i386后缀的官方包。
内容的提问来源于stack exchange,提问作者jgauthier
相关产品推荐
相关产品推荐

