编译64位和编译32位程序
2010-11-26 17:02
1456 查看
在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
自己写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
相关文章推荐
- 64位Ubuntu上编译32位程序操作步骤
- 在64位服务器上安装oracle 32位客户端只能被编译为x86的程序连接
- GCC 64位系统中编译32位程序
- 如何在ubuntu14.04(64位)编译运行32位程序
- Visual Studio 64位应用程序编译 (64,32位程序)
- 在64位linux下编译32位程序
- premake 在64位Ubuntu系统下编译32位GCC程序
- gcc 64位主机编译出32位程序和库
- 64位Linux环境 编译32位汇编程序(外链C库函数)
- 用VC2013编译了一个程序,在Windows 8、Windows 7(64位、32位)下都能正常运行。但在Win XP,Win2003下运行时,却报错不能运行
- 在32位系统下编译64位程序
- 在64位linux下编译32位程序
- 在64位linux下编译32位程序
- GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)
- GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)
- 在32位系统下编译64位程序
- windows 32位程序编译成64位
- 让易语言编译的32位程序在64位Windows7系统非管理员帐户中执行
- 64位Ubuntu上编译32位程序
- 64位linux下编译32位程序的错误“error: gnu/stubs-32.h: No such file or directory”