64位机器上的Crypto ++ 32位编译

时间:2015-12-24 13:21:29

标签: c++ crypto++

我在Ubuntu 64位机器上使用cryptopp。我需要为32位编译库,但我找不到如何。

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

gccg++有一个强制在32位模式下编译的特定选项,它是-m32。因此,如果正确设置了应用程序的Makefile系统,则只需按以下步骤运行编译:

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

这应该足够了。

答案 2 :(得分:1)

  

我应该在GNU Makefile中做一些更改,还是在调用make?

时使用可选参数

每个人的答案都适合你。为了迂腐,以下内容也适用于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

Crypto ++ 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及更高版本改变了这一点。 makefile尝试尊重用户提供的所有内容,包括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相同的原则。