關於在64位linux下開發32位linux程序的一些問題,ubuntu,debian,opensuse


 

1,debian x64上支行ubuntuX64編譯的32位程序 

Linux debian 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64

需要安裝包

apt-get install lib32stdc++6
apt install glibc-devel.i686 glibc-devel
apt-get install lib32z1-dev

apt install libc6-dev-i386

軟件包:lib32z1-dev(1:1.2.8.dfsg-2+deb8u1) [security]
lib32z1-dev 的相關鏈接
Screenshot
Debian 的資源:
報告問題
開發者信息
Debian Changelog
版權文件
Debian 補丁追蹤網站
下載源碼包 zlib:
[zlib_1.2.8.dfsg-2+deb8u1.dsc]
[zlib_1.2.8.dfsg.orig.tar.gz]
[zlib_1.2.8.dfsg-2+deb8u1.debian.tar.xz]
維護者:
Mark Brown (QA 頁面)
外部的資源:
主頁 [zlib.net]
相似軟件包:
lib64z1-dev
libz-mingw-w64-dev
lib32z1
libz-mingw-w64
zlib1g-dev
libn32z1-dev
zlib1g-dbg
lib64z1
zlib1g
compression library - 32 bit development
zlib is a library implementing the deflate compression method found in gzip and PKZIP. This package includes the development support files for building 32 bit applications.

其他與 lib32z1-dev 有關的軟件包
依賴
推薦
建議
增強
dep: lib32c-dev
本虛包由這些包填實: libc6-dev-i386
dep: lib32z1 (= 1:1.2.8.dfsg-2+deb8u1)
compression library - 32 bit runtime
dep: zlib1g-dev (= 1:1.2.8.dfsg-2+deb8u1)
壓縮庫 - 開發文件

 

有32位的環境后,在/下可以看見

 

 lib32,lib64的庫,程序就可以運行了.

使用file ,ldd 命令查看

 

 可以正常加載x86的地址了.

2,opensuse

openSUSE-Update-Leap-15.1 ,x64

zyppper install glibc-devel-32bit
zypper install libstdc++-devel-32bit 
zypper install libstdc++6-32bit  
前幾天在64位linux下開發跨平台的代碼,包括32位和64位的版本都需要編譯,在給g++加上-m32開關之后,g++報了一個錯誤:

gnu/stubs-32.h: No such file or directory compilation terminated. make: ***

在網上翻了一圈,情況就是64位linux缺省只安裝了64位的頭文件和Lib版本,需要增加32位的版本庫,網上提到的安裝方法一般是CentOs, Ubuntu之類的發行版,我用的是OpenSuse,最后在老外的網頁上找到了一個比較全面的各個版本的安裝說明:

You need 32bit embedded GNU C Library. This incldes development Libraries, header files, contains the symlinks, headers, and object files needed to compile and link programs which use the standard C library.

Fix for Debian Linux
Type the following command:
$ sudo apt-get install libc6-dev

Fix for Ubuntu Linux
Type the following command:
$ sudo apt-get install libc6-dev-i386

Fix for OpenSUSE / Novell Suse Linux (SLES)
Type the following command:
# zypper in glibc-devel-32bit

Fix for RHEL / Fedora / CentOS / Scientific Linux
Type the following command:
# yum install glibc-devel.i686

 

安裝了頭文件,還要注意安裝庫文件,方法同上,包括以下庫:

gcc-32bit gcc7-32bit libstdc++6-gcc7-32bit libstdc++6-gcc7-locale libstdc++6-locale

 3,ubuntu x64上支行32位程序 

Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-142-generic x86_64)

apt-get install ia32-libs
apt-get install lib32ncurses5 ​
apt-get install lib32z1
apt-get install lib32z1-dev
apt install libc6-dev-i386

 

Ubuntu apt-get install ia32 for 32-bit on 64-bit
先更新 ia32的庫

復制代碼
https://www.cnblogs.com/tianciliangen/articles/3395973.html


To install 32-bit libraries on a 64-bit linux system
Install:

  $ apt-get install ia32-libs
To install 32-bit libraries for development
Install:

  $ apt-get install lib32gcc1 libc6-i386 lib32z1 lib32stdc++6
  $ apt-get install lib32asound2 lib32ncurses5 lib32gomp1 lib32z1-dev lib32bz2-dev
  $ apt-get install g++-multilib
You may need this too, or it may be a virtual package already provided:

  $ apt-get install ia32-libs-gtk
You may need a symlink, which g++-multilib may set up for you automatically:

  $ ln -s /usr/lib32/libstdc++.so.6 /usr/lib32/libstdc++.so
Update LD_LIBRARY_PATH
You may need to add the LD path, for example like this:

  $ edit /etc/profile
  ... add these lines...
  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib32:/usr/lib32
  export LD_LIBRARY_PATH
To compile with gcc
To compile things with gcc, you need to add the flag -m32 like this:

  gcc -m32 myfile.c

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM