我正在使用Ubuntu 64位机器上的cryptopp
。 我需要为32位编译库,但是我不知道该如何操作。
我应该在GNU Makefile中进行一些更改,还是在调用make
时使用可选参数?
您可以尝试使用make CC='gcc -m32' CXX='g++ -m32'
来构建它,但您可能需要安装一些32位库。
您还可以在chroot
环境中设置一个32位发行版(使用debootstrap
),然后在其中构建您的crypto++
。
gcc
和g++
有一个特定的选项可以强制编译为32位模式,即-m32
。因此,如果您的应用程序的Makefile系统已正确设置,您只需要按以下方式运行编译:
$> CXX='g++ -m32' make
这应该足够了。
我应该在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
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
...
CXX
和CXXFLAGS
。这让我和其他一些用户感到困扰,因此当Wei将库交给社区时,这是我们改变的第一件事情之一。CXX
、CXXFLAGS
、AR
、ARFLAGS
等(来自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
。