我正在尝试在mac上构建rtmpdump和librtmp,但是我无法为我的生活解决它为什么不起作用。我正在使用自己构建的openssl:
$ openssl version
OpenSSL 1.1.0-pre3 (alpha) 15 Feb 2016
我已正确设置了标志(我认为),但是当我尝试编译时,我得到了这个:
$ make INC=-I/usr/local/include
gcc -Wall -I/usr/local/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_OPENSSL -O2 -fPIC -c -o rtmp.o rtmp.c
In file included from rtmp.c:152:
./handshake.h:120:12: error: variable has incomplete type 'HMAC_CTX' (aka 'struct hmac_ctx_st')
HMAC_CTX ctx;
^
/usr/local/include/openssl/ossl_typ.h:145:16: note: forward declaration of 'struct hmac_ctx_st'
typedef struct hmac_ctx_st HMAC_CTX;
^
In file included from rtmp.c:152:
./handshake.h:125:3: warning: implicit declaration of function 'HMAC_CTX_init' is invalid in C99 [-Wimplicit-function-declaration]
HMAC_setup(ctx, secretKey, 128);
^
./handshake.h:72:35: note: expanded from macro 'HMAC_setup'
#define HMAC_setup(ctx, key, len) HMAC_CTX_init(&ctx); HMAC_Init_ex(&ctx, key, len, EVP_sha256(), 0)
^
./handshake.h:127:3: warning: implicit declaration of function 'HMAC_CTX_cleanup' is invalid in C99 [-Wimplicit-function-declaration]
HMAC_finish(ctx, digest, digestLen);
^
./handshake.h:74:67: note: expanded from macro 'HMAC_finish'
#define HMAC_finish(ctx, dig, dlen) HMAC_Final(&ctx, dig, &dlen); HMAC_CTX_cleanup(&ctx)
^
./handshake.h:269:12: error: variable has incomplete type 'HMAC_CTX' (aka 'struct hmac_ctx_st')
HMAC_CTX ctx;
^
/usr/local/include/openssl/ossl_typ.h:145:16: note: forward declaration of 'struct hmac_ctx_st'
typedef struct hmac_ctx_st HMAC_CTX;
^
rtmp.c:192:13: warning: comparison of constant 18446744073709551597 with expression of type 'uint32_t' (aka 'unsigned int') is always false [-Wtautological-constant-out-of-range-compare]
if (nSize > SIZE_MAX - RTMP_MAX_HEADER_SIZE)
~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3 warnings and 2 errors generated.
make[1]: *** [rtmp.o] Error 1
make: *** [librtmp/librtmp.a] Error 2
看起来它可能与我正在使用的OpenSSL版本存在兼容性问题。有谁知道如何解决这类问题,或者对可能负责的OpenSSL的任何更改?
答案 0 :(得分:1)
OpenSSL 1.1.0-pre3(alpha)2016年2月15日...
有谁知道如何解决这类问题,或者对可能负责的OpenSSL的任何更改?
从广义上讲,OpenSSL 1.1.x似乎有两个高级别的变化导致了大部分问题。首先是对构建系统的更改。其次是私人API的坚定姿态。我想你会看到第二个私有API的工件。
一般来说,1.1.0-pre3和1.1.0-pre4存在许多问题,大多数都无法取得成功make test
。问题包括32位OS X PowerMac,64位OS X PowerMac,32位OS X, 64位OS X , 32位ARM的配置和构建问题, 64位ARM, OpenBSD 5.7, NetBSD 7.0 ,Cygwin,CentOS 5,CentOS 7和i686。为了准备即将于2016年3月14日星期一到达的即将到来的Beta-1,我已经提交了大约25个错误。
你现在应该避免1.1.0-pre-N
,因为它太不稳定了。你应该在x86_64 Linux下可以,但其他任何东西都是目前的废话。你应该能够在Beta-2周围再次拿起它。
从2016年3月11日星期五的提交后,你可能会有更好的运气。这将大致提交0d4d5ab和4c1cf7e。您可以通过以下方式获取最新信息:
git clone git://git.openssl.org/openssl.git
或者,使用1.0.2稳定版本。