在64位机器上编译Crypto++ 32位程序

3

我正在使用Ubuntu 64位机器上的cryptopp。 我需要为32位编译库,但是我不知道该如何操作。

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


Ubuntu的版本是什么?它已经设置为multiarch了吗? - Matteo Italia
3个回答

5

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

您还可以在chroot环境中设置一个32位发行版(使用debootstrap),然后在其中构建您的crypto++


4

gccg++有一个特定的选项可以强制编译为32位模式,即-m32。因此,如果您的应用程序的Makefile系统已正确设置,您只需要按以下方式运行编译:

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

这应该足够了。


快速而精确。像魔法一样好用。谢谢。 - Mendes

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的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。这让我和其他一些用户感到困扰,因此当Wei将库交给社区时,这是我们改变的第一件事情之一。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接