1. 程式人生 > >如何在64位linux強制編譯32位應用程式

如何在64位linux強制編譯32位應用程式

原文地址:http://blog.chinaunix.net/uid-20109107-id-86319.html

GDC注:因為需要解決在linux64機上編譯32位的mongodb(沒辦法,因為編譯的php是32位,然後我想將mongdb擴充套件新增到php中),在網上搜了很多文章,感覺這篇好懂,而且好用。我使用的是方法一,具體為:

> linux32 ./configure --with-php-config=/usr/local/php/bin/php-config

> export CFLAGS="-m32 -04 -march=i386 -mtune=i386"

> make

make成功後,用file命令看一下modules目錄下的生成的mongo.so。輸出為“ELF 32-bit LSB shared object”。哈哈,成功!

方法一:
首先需要安裝
32位的相容庫

apt-get install ia32-libs libc6-dev-i386 linux32

1.
linux32命令在configure時改一下CHOST,設定一下編譯環境

$ linux32 ./configure

#
系統型別將變為:i686-pc-linux-gnu
#
而不是x86_64-unknown-linux-gnu

2.
設定GCC的引數
export CFLAGS="-m32  
-march=i386 -mtune=i386"
export CFLAGS="-m32 -04 -march=i386 -mtune=i386"

#最關鍵是-m32

-m32, -m64
Generate code for a 32-bit or 64-bit environment. The 32-bit environment sets int, long and pointer to 32 bits and generates code that runs on any i386 system. The 64-bit environment sets int to 32 bits and long and pointer to 64 bits and generates code for AMD's x86-64 architecture.

方法二:

修改/usr/bin/gcc ld,強制加入m32資訊

將gcc,ld重新命名為gcc.64,ld.64

/usr/bin/gcc

#!/bin/sh

gcc.64 –m32 [email protected]

/usr/bin/ld

#!/bin/sh

ld.64 –m elf_i386 [email protected]


相關推薦

如何在64linux強制編譯32應用程式

原文地址:http://blog.chinaunix.net/uid-20109107-id-86319.html GDC注:因為需要解決在linux64機上編譯32位的mongodb(沒辦法,因為編譯的php是32位,然後我想將mongdb擴充套件新增到php中),在網

64ubuntu下編譯32彙編程式(同時連結C庫)

cmd.s如下://.include "linux.s" .section .data output1: .ascii "There are %d parameters:\n\0" //output2: // .ascii "%s/0" .section .text

64系統下編譯32的彙編程式

最近重新開始看彙編的書,但是依然還是以前的問題,沒法用popl和pushl(以前是乾脆用的popq以及pushq),但是感覺用起來麻煩,特別對照書看,那麼 在網上搜索了一下發現果然有類似的部落格 先是彙編 as --32 -o powers.o powers.s 然後連結

64系統下編譯32彙編程式

#只是例子,計算2^3 + 5^2 .code32 .section .data .section .text .globl _start _start: pushl $

32的fortran函式庫在64Linux編譯及使用的方法

      最近一直在使用一個數值函式庫。為了嘗試64位的精度,花了整夜折騰出些東西。       函式庫在32位Fedora下使用時,文件提供的例程的呼叫的都是以靜態庫方式呼叫的,使用g95編譯後,用ar 工具整理到了一個.a檔案。在64位的Fedora 13中,使用64位

Linux系統是32還是64查看方法總結

x86_64 如果 9.png 支持 ges mod lag span long 【聲明】 本文版權歸原作者所有,歡迎轉載,轉載請註明出處。 原作者:瀟湘隱者 出處:http://www.cnblogs.com/kerrycode/ 原文鏈接:https://www.cn

判斷Linux系統是32還是64

方法1: 執行以下命令: --------------------------- $ getconf LONG_BIT --------------------------- 如果輸出32即為32位系

64開發環境下編譯32dll檔案

       最近在做PH專案的時候,遇到了一個小問題。我們做的系統,算是在人家基礎上的一個二次開發:我們用到他們裝置,同時需要他們給我們提供介面。我們拿到介面,在32位系統上編譯不會出問題,而在我

linux驅動編寫3264設備註意事項

  Linux 64 位體系結構     不幸的是,C 程式語言並沒有提供一種機制來新增新的基本資料型別。因此,提供 64 位的定址和整數運算能力必須要修改現有資料型別的繫結或對映,或者向 C 語言中新增新的資料型別。     表 1. 32 位和 64 位資料模型 ILP32 LP64 LLP64

64Windows系統下32應用程式連線MySql

1.首先得安裝“Connector/ODBC”,就是Mysql的ODBC驅動,這個是與應用程式相關的,而不是與作業系統相關的,也就是說,不管你的系統是x64還是x86,只要你的應用程式是x86的那麼,“Connector/ODBC”就要安裝x86的,才能正常,下面的是下載

64ubuntu編譯32程式

如上使用C4這個小工具時遇到來需要模擬32位系統的需求,發現使用-m32引數後,編譯提示錯誤,如下: /usr/bin/ld: 未知的模擬模式: 32 支援的模擬: elf_x86_64 elf32_x86_64 elf_i386 i386linux elf_l1om e

檢視linux Unix系統3264

1.#uname -a如果有x86_64就是64位的,沒有就是32位的 這是64位的 # uname -a Linux WORKS 2.6.9-11.ELsmp #1 SMP Fri May 20 18:25:30 EDT 2005 x86_64 x86_64 x86_6

64centos7 編譯 32檔案出錯

[[email protected] demo]$ gcc -m32 str.c -o app /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.8.5/lib

ubuntu 64上的GCC如何編譯32程式

執行命令 gcc -v 顯示: Target: x86_64-linux-gnu 所以,我這裡的gcc預設生成64位的程式。 如果想編出32位的程式,就要加 -m32選項。可是我嘗試了,還是不行。 原來,需要安裝東西。 $ sudo apt-get install b

android工程如何編譯3264

android.mk檔案中有LOCAL_MODULE_PATH的值比如為$(TARGET_OUT_SHARED_LIBRARIES)/hw的改為LOCAL_MODULE_RELATIVE_PATH := hw,後一種可以分別在lib和lib64下分別生成32位和64位的s

openssl windows編譯 32&64

openssl版本:openssl-1.0.0a 64位編譯 1、編譯環境: openssl-1.0.0a必須用vs2008編譯,VC6+nasm32是無法編譯了,因為openssl-1.0.0a要求cl.exe的版本比較高,vc6無法編譯,所以用vs2008編

【轉載】64Win7下成功安裝64的Oracle、32的InstantClient和PLSQL Developer

註銷 五步 ldb 需要 windows inf 目錄 登錄 class 感謝原作者,原文鏈接:https://wenku.baidu.com/view/433d0b544a7302768f993926.html 經實際安裝操作,通過以下步驟能夠成功地把Oracle安裝到

centos64編譯32程序

rom 編譯程序 span libs \n fas swd mirror 因此 test.c #include <stdio.h> int main() { printf("sizeof long is %d\n",sizeof(lo

centos64編譯32程式問題

在centos64位上面編譯32位程式的時候遇到編譯不過的問題,解決過程如下: 1.編譯遇到錯誤,提示錯誤如下: [[email protected] code]# make In file included from /usr/include/features.h:399:0

64系統下註冊32dll文件

共存 dll文件 支持 不兼容 class syswow64 txt clas 復制 64位系統下註冊32位dll文件 在64位系統裏註冊32位軟件所需的一些dll會提示不兼容,大概因為32 位進程不能加載64位Dll,64位進程也不可以加載32的導致。 若要支持的32