![](/img/trans.png)
[英]Compiling 32bit on 64bit machine : /usr/bin/ld: cannot find -l<someLibs>
[英]Crypto++ 32bit compilation on a 64bit machine
我在Ubuntu 64bit机器上使用cryptopp
。 我需要编译32位的库,但我不知道如何。
我应该在GNU Makefile中做一些更改,还是在调用make
时使用可选参数?
您可以尝试使用make CC='gcc -m32' CXX='g++ -m32'
构建它,但您可能需要几个32位库。
您还可以在chroot
-ed环境中设置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
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
...
请注意,它无条件地设置CXX
和CXXFLAGS
。 这困扰了我和其他一些用户,所以这是我们在将图书馆转移到社区时我们改变的第一件事。
Crypto ++ 5.6.3及更高版本改变了这一点。 makefile尝试尊重用户提供的所有内容,包括CXX
, CXXFLAGS
, AR
, ARFLAGS
等(来自5.6.3的 ARFLAGS
):
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
原则相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.