Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#7086 closed defect (invalid)

ffmpeg does not install with OpenSSL support

Reported by: supredoe Owned by:
Priority: normal Component: undetermined
Version: unspecified Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:

  • Unable to compile ffmpeg with OpenSSL 1.0.1j
  • Not able to upgrade OpenSSL version; receiving compiler errors about undefined references to BIO_clear_flags and BIO_set_flags

====

Error message output:

LD ffmpeg_g
libavformat/libavformat.a(tls_openssl.o): In function `url_bio_ctrl':
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:204: undefined reference to `BIO_clear_flags'
libavformat/libavformat.a(tls_openssl.o): In function `url_bio_bread':
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:179: undefined reference to `BIO_clear_flags'
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:181: undefined reference to `BIO_set_flags'
libavformat/libavformat.a(tls_openssl.o): In function `url_bio_bwrite':
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:193: undefined reference to `BIO_clear_flags'
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:195: undefined reference to `BIO_set_flags'
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:193: undefined reference to `BIO_clear_flags'
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:195: undefined reference to `BIO_set_flags'
collect2: error: ld returned 1 exit status

====

How to reproduce:

  • openssl version 1.01j can be downloaded here:

https://www.openssl.org/source/old/1.0.1/openssl-1.0.1j.tar.gz

---

  • the ./configure command is as follows:

PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --enable-gpl --enable-libx264 --enable-openssl --enable-libfdk_aac --enable-nonfree --enable-libmp3lame

---

ffmpeg version is the most recent version available from:

git clone --depth 1 git://source.ffmpeg.org/ffmpeg

---

built on 2018.03.15

Change History (7)

comment:1 by Hendrik, 6 years ago

Seems to me like your build environment is somehow screwed up, and pulling in headers from OpenSSL 1.1, and then trying to link against 1.0.1?

in reply to:  1 comment:2 by supredoe, 6 years ago

Replying to heleppkes:

Seems to me like your build environment is somehow screwed up, and pulling in headers from OpenSSL 1.1, and then trying to link against 1.0.1?

Is there a way to specify the exact location of the headers to be used?

I've previously tried hard-coding the absolute path to #include <openssl/bio.h>

(so it would be #include </usr/include/openssl/bio.h>), but the same errors persist.

Is there a different way to be sure that the correct headers are used?

Last edited 6 years ago by supredoe (previous) (diff)

comment:3 by supredoe, 6 years ago

Update:

Copied the openssl 1.0.1j header files directly to /usr/include (cp -L -R include/openssl /usr/include).

Recompiling ffmpeg now.

Hopefully this will clear up any possible version conflict regarding headers.

---

Outcome (eight minutes later):

No effect. The same errors still persist.

Last edited 6 years ago by supredoe (previous) (diff)

comment:4 by Carl Eugen Hoyos, 6 years ago

Resolution: invalid
Status: newclosed
Version: 3.4unspecified

A default compilation of openssl 1.0.1j provides definitions for BIO* in libcrypto.a here.
Maybe pkg-config is the culprit, all your external dependencies are also supposed to work without pkg-config.

in reply to:  4 comment:5 by supredoe, 6 years ago

Replying to cehoyos:

A default compilation of openssl 1.0.1j provides definitions for BIO* in libcrypto.a here.
Maybe pkg-config is the culprit, all your external dependencies are also supposed to work without pkg-config.

All dependencies have been reinstalled for system-wide install (no longer installing into "$HOME/ffmpeg_build/").

Attempted re-compile of ffmpeg with the following ./configure line:

./configure --enable-gpl --enable-libx264 --enable-openssl --enable-libfdk_aac --enable-nonfree --enable-libmp3lame

Note that pkg-config is no longer specified.

===

Same errors occur:

LD ffmpeg_g
libavformat/libavformat.a(tls_openssl.o): In function `url_bio_ctrl':
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:204: undefined reference to `BIO_clear_flags'
libavformat/libavformat.a(tls_openssl.o): In function `url_bio_bread':
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:179: undefined reference to `BIO_clear_flags'
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:181: undefined reference to `BIO_set_flags'
libavformat/libavformat.a(tls_openssl.o): In function `url_bio_bwrite':
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:193: undefined reference to `BIO_clear_flags'
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:195: undefined reference to `BIO_set_flags'
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:193: undefined reference to `BIO_clear_flags'
/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c:195: undefined reference to `BIO_set_flags'

===

Also, openSSL is installed in /usr/include. The directory /usr/local/include/openssl is a softlink to /usr/include/openssl.

Last edited 6 years ago by supredoe (previous) (diff)

comment:6 by supredoe, 6 years ago

Edited the file "/local-directory-name/ffmpeg/latest_git_20180316/ffmpeg/libavformat/tls_openssl.c" to hard-code the path to openSSL headers:

===
#include </usr/include/openssl/bio.h>
#include </usr/include/openssl/ssl.h>
#include </usr/include/openssl/err.h>
===

The file bio.h usr/include/openssl/bio.h contains BIO_set_flags and BIO_clear_flags as well, as is excerpted unchanged below, directly from the file "bio.h":

===

void BIO_set_flags(BIO *b, int flags);
int BIO_test_flags(const BIO *b, int flags);
void BIO_clear_flags(BIO *b, int flags);

#define BIO_get_flags(b) BIO_test_flags(b, ~(0x0))
#define BIO_set_retry_special(b) \

BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY))

#define BIO_set_retry_read(b) \

BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))

#define BIO_set_retry_write(b) \

BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))

/* These are normally used internally in BIOs */
#define BIO_clear_retry_flags(b) \

BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))

#define BIO_get_retry_flags(b) \

BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))

===

Are there other options and possibilities, in case this doesn't work? (Re-installing the entire operating system isn't an option.)

comment:7 by supredoe, 6 years ago

Update:

Hardcoding the openSSL header locations (see previous comment) had no effect.

Issue is still unresolved.

Note: See TracTickets for help on using tickets.