NGSolve / netgen

https://ngsolve.org
GNU Lesser General Public License v2.1
295 stars 129 forks source link

libnggui.so: undefined reference to ffmpeg functions #157

Open siegLoesch opened 1 year ago

siegLoesch commented 1 year ago

During build of netgen v6.2.2304 the link operation for ng/netgen failed (using cmake option: -DUSEMPEG:BOOL=YES): /usr/bin/ld: libnggui.so: undefined reference to avcodec_find_encoder' /usr/bin/ld: libnggui.so: undefined reference toavformat_write_header' /usr/bin/ld: libnggui.so: undefined reference to av_frame_free' /usr/bin/ld: libnggui.so: undefined reference toavcodec_open2' /usr/bin/ld: libnggui.so: undefined reference to av_interleaved_write_frame' /usr/bin/ld: libnggui.so: undefined reference toavformat_alloc_output_context2' /usr/bin/ld: libnggui.so: undefined reference to av_frame_make_writable' /usr/bin/ld: libnggui.so: undefined reference toavcodec_send_frame' /usr/bin/ld: libnggui.so: undefined reference to sws_freeContext' /usr/bin/ld: libnggui.so: undefined reference toav_init_packet' /usr/bin/ld: libnggui.so: undefined reference to av_dict_free' /usr/bin/ld: libnggui.so: undefined reference toav_packet_rescale_ts' /usr/bin/ld: libnggui.so: undefined reference to avcodec_get_name' /usr/bin/ld: libnggui.so: undefined reference tosws_scale' /usr/bin/ld: libnggui.so: undefined reference to avcodec_parameters_from_context' /usr/bin/ld: libnggui.so: undefined reference toav_dump_format' /usr/bin/ld: libnggui.so: undefined reference to av_write_trailer' /usr/bin/ld: libnggui.so: undefined reference toavformat_new_stream' /usr/bin/ld: libnggui.so: undefined reference to avcodec_receive_packet' /usr/bin/ld: libnggui.so: undefined reference toav_frame_alloc' /usr/bin/ld: libnggui.so: undefined reference to av_image_fill_arrays' /usr/bin/ld: libnggui.so: undefined reference toav_frame_get_buffer' /usr/bin/ld: libnggui.so: undefined reference to avcodec_alloc_context3' /usr/bin/ld: libnggui.so: undefined reference toavcodec_free_context' /usr/bin/ld: libnggui.so: undefined reference to sws_getContext' /usr/bin/ld: libnggui.so: undefined reference toavformat_free_context' /usr/bin/ld: libnggui.so: undefined reference to avio_closep' /usr/bin/ld: libnggui.so: undefined reference toavioopen' collect2: error: ld returned 1 exit status

My solution / workaround was to add ${FFMPEG_LIBRARIES} to the _target_linklibraries command inside the CMakeLists.txt at ng directory. I have created a patch for that which is attached here: cmListsNg-ffmpegLibraries.zip. Using that it compiles fine without error.

If there is time please let us know if you agree with that.

Best regards Siegfried

drew-parsons commented 12 months ago

The undefined references are in libnggui.so not netgen directly. Other optional libraries are processed in the toplevel CMakeLists.txt . Using them as an example, this patch works

Index: netgen/CMakeLists.txt
===================================================================
--- netgen.orig/CMakeLists.txt  2023-11-10 10:33:08.124132623 +0100
+++ netgen/CMakeLists.txt       2023-11-10 10:35:43.421445839 +0100
@@ -438,6 +438,9 @@
     find_package(FFMPEG REQUIRED)
     add_definitions(-DFFMPEG -D__STDC_CONSTANT_MACROS)
     include_directories(${FFMPEG_INCLUDE_DIR})
+    if(USE_GUI)
+        target_link_libraries(nggui INTERFACE ${FFMPEG_LIBRARIES})
+    endif(USE_GUI)
 endif (USE_MPEG)

 #######################################################################