为什么我不能用多个线程编译OpenSSL? (make -j3)

时间:2015-02-20 22:18:23

标签: c linux openssl makefile

我正在尝试构建OpenSSL。如果我用make(1个线程)构建它,它编译好了。但是如果我使用3个线程(make -j3)构建它,我会遇到很多链接器错误:

bntest.o: In function `message':
bntest.c:(.text+0x30): undefined reference to `BIO_puts'
bntest.c:(.text+0x3b): undefined reference to `BIO_puts'
bntest.o: In function `test_add':
bntest.c:(.text+0xe2): undefined reference to `BN_init'
bntest.c:(.text+0xec): undefined reference to `BN_init'
bntest.c:(.text+0xf6): undefined reference to `BN_init'
bntest.c:(.text+0x107): undefined reference to `BN_bntest_rand'
bntest.c:(.text+0x119): undefined reference to `BN_print'
bntest.c:(.text+0x126): undefined reference to `BIO_puts'
bntest.c:(.text+0x156): undefined reference to `BN_add'
bntest.c:(.text+0x166): undefined reference to `BN_add'
bntest.c:(.text+0x191): undefined reference to `BN_bntest_rand'
bntest.c:(.text+0x1d3): undefined reference to `BN_add'
bntest.c:(.text+0x1f5): undefined reference to `BN_print'
bntest.c:(.text+0x202): undefined reference to `BIO_puts'
bntest.c:(.text+0x20f): undefined reference to `BN_print'
bntest.c:(.text+0x21c): undefined reference to `BIO_puts'
bntest.c:(.text+0x264): undefined reference to `BN_free'
bntest.c:(.text+0x26e): undefined reference to `BN_free'
bntest.c:(.text+0x278): undefined reference to `BN_free'
bntest.o: In function `test_sub':
bntest.c:(.text+0x2af): undefined reference to `BN_init'
bntest.c:(.text+0x2b9): undefined reference to `BN_init'
bntest.c:(.text+0x2c3): undefined reference to `BN_init'
bntest.c:(.text+0x2e0): undefined reference to `BN_bntest_rand'
bntest.c:(.text+0x322): undefined reference to `BN_sub'
...and so on, for hundreds of lines...

要清楚,我运行的命令的确切顺序是:

$ wget https://www.openssl.org/source/openssl-1.0.1l.tar.gz
$ tar -xzf openssl-1.0.1l.tar.gz
$ cd openssl-1.0.1l
$ ./config
$ make -j3

我在x64机器上使用Ubuntu 14.10。

这可能是一个RTFM类型的问题,但我还没有看到任何地方说不支持构建具有多个线程的OpenSSL。

所以问题:是否支持多线程构建OpenSSL?如果是这样,我做错了什么?

1 个答案:

答案 0 :(得分:4)

MadScientist的评论表明,makefile必须设计为支持并行构建。显然OpenSSL应该支持并行make,但是他们的一个bug reports表明这种支持在一些情况下被打破了。此错误最近在2014年12月12日标记为已修复,因此使用较新版本的OpenSSL可能会解决您遇到的问题。