2015-12-24 140 views
3

我在Ubuntu 64位机器上使用cryptopp。我需要为32位编译库,但我不知道如何。64位机器上的Crypto ++ 32位编译

当我调用make时,是否可以在GNU Makefile中进行一些更改或使用可选参数?

+0

什么Ubuntu版本?它是否已经设置为多元化? –

回答

4

gccg++有一个强制在32位模式下编译的特定选项,它是-m32。所以,如果你的应用程序的Makefile文件系统设置正确,你只需要运行编译如下:

$> CXX='g++ -m32' make 

这应该是足够的。

+0

快速,准确。奇迹般有效。谢谢。 – Mendes

5

你可以尝试使用make CC='gcc -m32' CXX='g++ -m32'来构建它,但你可能需要几个32位的库。

您也可以在chroot环境中(使用debootstrap)设置32位分布并在里面构建crypto++

1

在调用make时,我应该在GNU Makefile中进行一些更改还是使用可选参数?

大家的答案都应该适合你。要迂腐,以下内容也适用于Crypto ++ 5.6.3及更高版本。它被添加到CXXFLAGS,因为它的编译器选项:

export CXXFLAGS="-DNDEBUG -g2 -O2 -m32" 
make static dynamic cryptest.exe 
... 

# Run validation suite 
./cryptest.exe v 

# Run test vectors 
./cryptest.exe tv all 

加密++ 5.6.2用于使用(从5.6.2's GNUMakefile)以下:

1 CXXFLAGS = -DNDEBUG -g -O2 
2 # -O3 fails to link on Cygwin GCC version 4.5.3 
3 # -fPIC is supported. Please report any breakage of -fPIC as a bug. 
4 # CXXFLAGS += -fPIC 
... 
8 ARFLAGS = -cr # ar needs the dash on OpenBSD 
9 RANLIB = ranlib 
... 
25 ifeq ($(CXX),gcc) # for some reason CXX is gcc on cygwin 1.1.4 
26 CXX = g++ 
27 endif 
... 

注意到它无条件地同时设置CXXCXXFLAGS 。这让我和其他一些用户困惑不已,所以当魏将图书馆转到社区时,这是我们改变的第一件事情之一。

Crypto ++ 5.6.3及以上版本改变了这一点。生成文件试图兑现所有用户提供了包括CXXCXXFLAGSARARFLAGS等(从5.6.3's GNUMakefile):

1 # Base CXXFLAGS used if the user did not specify them 
2 CXXFLAGS ?= -DNDEBUG -g2 -O2 
... 
14 AR ?= ar 
15 ARFLAGS ?= -cr # ar needs the dash on OpenBSD 
16 RANLIB ?= ranlib 
... 
49 # We honor ARFLAGS, but the "v" often option used by default causes a noisy make 
50 ifeq ($(ARFLAGS),rv) 
51 ARFLAGS = r 
52 endif 
... 

同样的原则苹果GNUmakefile-cross如果你正在为嵌入式进行交叉编译和移动平台。

相关问题