Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FFMpeg will not link to 2.1.1 release built as shared library #766

Closed
boxerab opened this issue May 2, 2016 · 6 comments
Closed

FFMpeg will not link to 2.1.1 release built as shared library #766

boxerab opened this issue May 2, 2016 · 6 comments
Labels

Comments

@boxerab
Copy link
Contributor

boxerab commented May 2, 2016

FFMPeg will link with the 2.1 release.

It seems that a recent change to visibility of symbols is the cause: if OPJ_STATIC is defined,
then API symbols are marked "hidden". However, FFMpeg always defines OPJ_STATIC when linking, even for dynamic builds. So, linking fails in this case.

#   if __GNUC__ >= 4
#       if defined(OPJ_STATIC) /* static library uses "hidden" */
#           define OPJ_API    __attribute__ ((visibility ("hidden")))
#       else

The reason why FFMpeg always define OPJ_STATIC is because of mingw builds: mingw doesn't mangle names like gcc,

@boxerab boxerab changed the title FFMpeg will not link to master built as shared library FFMpeg will not link to 2.1.1 release built as shared library Jul 23, 2016
@malaterre
Copy link
Collaborator

I believe this is now solved upstream. Closing.

@szukw000
Copy link
Contributor

Mathieu Malaterre wrote:

I believe this is now solved upstream. Closing.

What kind of believed upstream do you mean?

winfried

libavcodec/libopenjpegdec.o: In function libopenjpeg_decode_frame': ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:378: undefined reference toopj_create_decompress'
ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:396: undefined reference to opj_set_error_handler' ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:397: undefined reference toopj_set_warning_handler'
ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:398: undefined reference to opj_set_info_handler' ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:409: undefined reference toopj_setup_decoder'
ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:414: undefined reference to opj_stream_default_create' ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:431: undefined reference toopj_stream_set_read_function'
ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:432: undefined reference to opj_stream_set_skip_function' ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:433: undefined reference toopj_stream_set_seek_function'
ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:435: undefined reference to opj_stream_set_user_data' ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:441: undefined reference toopj_stream_set_user_data_length'
ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:443: undefined reference to opj_read_header' ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:372: undefined reference toopj_create_decompress'
ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:554: undefined reference to opj_image_destroy' ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:556: undefined reference toopj_stream_destroy'
ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:557: undefined reference to opj_destroy_codec' ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:495: undefined reference toopj_decode'
libavcodec/libopenjpegdec.o: In function libopenjpeg_decode_init': ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:338: undefined reference toopj_set_default_decoder_parameters'
libavcodec/libopenjpegdec.o: In function libopenjpeg_static_init': ffmpeg-3.1.3/libavcodec/libopenjpegdec.c:567: undefined reference toopj_version'
libavcodec/libopenjpegenc.o: In function libopenjpeg_encode_frame': ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:705: undefined reference toopj_create_compress'
ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:716: undefined reference to opj_set_error_handler' ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:717: undefined reference toopj_set_warning_handler'
ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:785: undefined reference to opj_stream_destroy' ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:786: undefined reference toopj_destroy_codec'
ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:718: undefined reference to opj_set_info_handler' ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:724: undefined reference toopj_setup_encoder'
ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:729: undefined reference to opj_stream_default_create' ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:757: undefined reference toopj_stream_set_write_function'
ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:758: undefined reference to opj_stream_set_skip_function' ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:759: undefined reference toopj_stream_set_seek_function'
ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:761: undefined reference to opj_stream_set_user_data' ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:768: undefined reference toopj_start_compress'
ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:769: undefined reference to opj_encode' ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:770: undefined reference toopj_end_compress'
libavcodec/libopenjpegenc.o: In function libopenjpeg_encode_close': ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:798: undefined reference toopj_image_destroy'
libavcodec/libopenjpegenc.o: In function libopenjpeg_encode_init': ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:307: undefined reference toopj_set_default_encoder_parameters'
ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:384: undefined reference to opj_image_destroy' libavcodec/libopenjpegenc.o: In functionmj2_create_image':
ffmpeg-3.1.3/libavcodec/libopenjpegenc.c:287: undefined reference to opj_image_create' /usr/lib64/gcc/x86_64-slackware-linux/5.3.0/../../../../x86_64-slackware-linux/bin/ld: libavcodec/libavcodec.so.57: hidden symbolopj_setup_decoder' isn't defined
/usr/lib64/gcc/x86_64-slackware-linux/5.3.0/../../../../x86_64-slackware-linux/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
make: *** [libavcodec/libavcodec.so.57] Error 1

@malaterre
Copy link
Collaborator

that seemed to me like an exact duplicate of #802. Am I wrong ?

@szukw000
Copy link
Contributor

@malaterre , I have made a test.

FFMPEG compiles bug-free with openjpeg-1.5.x .

So I made a copy of openjpeg2-git-2016-09-21-1/src/lib/openjp2/openjpeg.h . In openjpeg.h I
removed the lines between 79 and 108.

Then I inserted at line 79 the respective lines of openjpeg-1.5.3-1/libopenjpeg/openjpeg.h,
compiled and installed.

Now I was able to compile and install ffmpeg-3.1.3 bug-free.

winfried

@szukw000
Copy link
Contributor

@malaterre , I used the following compilers:

gcc (GCC) 5.3.0 (Linux 4.7.3)
MSVC 19.0.24210.0 (WIN7-64, Community 2015)
gcc (Debian 4.9.2-10) 4.9.2 (PPC-64)

winfried

@malaterre
Copy link
Collaborator

@szukw000 you should instead follow instructions from: #802 (comment)

@detonin detonin added the wontfix label Aug 3, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants