编译64位和编译32位程序

在64位的机器上编译32位还是62位程序,主要是要编译器和链接器上加上参数据:-m32 (编译32位) -m64(编译64)

自己写Makefile的话,把上面的标志放到编译器和链接器参数中就可以了。

 

如果用autoconf生成Makefile的话,则要在configure.in中的编译器和链接器变量上加上上面参数:

例如:下面例子是编译32位的程序,如果要编译64位的,则把红色的部分换成 -m64

 

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(ShowServer, 1.0, kl222@126.com)
AC_CONFIG_SRCDIR([.])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE(ShowServer, 1.0)

# Checks for programs.
AC_PROG_CXX

CFLAGS=" -O2"
CXXFLAGS="-m32 -D_DEBUG "
LIBS="-L. -L$ACE_LIB -L$LIB_PATH/lib"
LDFLAGS="-m32"

# Checks for libraries.
AC_CHECK_LIB([pthread], [pthread_create], , exit 1)
AC_HAVE_LIBRARY([ACE], , exit 1)
AC_HAVE_LIBRARY([Cfg], , exit 1)

# Checks for header files.
AC_HEADER_STDBOOL
AC_C_CONST

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.


AC_PROG_INSTALL

AC_OUTPUT(Makefile ShowServer/Makefile TestClient/Makefile)

 

 

 

 

linux32、 linux63分别用于设置编译环境

linux32 ../configure

 

linux32 - Set i686 uname emulation processes.  linux64 - Reset uname emulation

这个命令相当于 ./configure 参数中设置的 --host 和 --build

 

 

在64位平台上编译32位的ACE:

linux32 ../configure --with-tao=no --enable-ssl=no --prefix=/home/sxit/kl/ACE_wrappers/build --enable-ace-examples=no --enable-ace-tests=no --enable-ace-cdr-swap-on-read=no --enable-reentrant=no --enable-ace-cdr-alignment=no CCFLAGS="-m32 " CPPFLAGS="-m32 " CXXFLAGS="-m32" CFLAGS="-m32"

 

注意这里不要加 LDFLAGS="-m32" ,因为 linux32已把环境设置成32的环境。

在编译libiconv库里,则要加LDFLAGS="-m32" 否则编译出来的为32的.o文件,链接成64位的.so文件

[root@HYWG libiconv-1.9.1]# linux32 ./configure CCFLAGS="-m32 " CPPFLAGS="-m32 " CXXFLAGS="-m32" CFLAGS="-m32" LDFLAGS=-m32

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值