如何在Mac OS X上编译librtmp

时间:2016-03-13 02:21:58

标签: macos compilation compiler-errors openssl osx-elcapitan

我正在尝试在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的任何更改?

1 个答案:

答案 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稳定版本。