Bug #1103
closedDCMTK symbols conflict with recent versions of libjpeg-turbo
100%
Description
The most recent versions (>=3.0.0) of libjpeg-turbo have added support for lossless compression.
To this end, libjpeg-turbo has added new bitwidth-prefixed functions to their API: https://github.com/libjpeg-turbo/libjpeg-turbo/blob/3.0.1/libjpeg.txt#L114
These functions share the same prefixes that are used in DCMTK’s source-distributed version of the ijg-libjpeg variant.
In some configurations, this poses a problem, since linking DCMTK against libtiff with jpeg support through libjpeg-turbo will cause duplicate definitions of those clashing symbols to be available.
Here is a pull request for vcpkg to resolve this issue by prefixing the DCMTK provided libjpeg library with “dcmtk_” : https://github.com/microsoft/vcpkg/pull/36274
Essentially the pull request changes the defines already present by prefixing them with "dcmtk_", shown here for dcmjpeg/libijg8/jpeglib8.h
. Analog changes need to be made in jpeglib12.h and jpeglib16.h:
#define jcopy_block_row dcmtk_jcopy8_block_row #define jcopy_sample_rows dcmtk_jcopy8_sample_rows #define jdiv_round_up dcmtk_jdiv8_round_up #define jinit_1pass_quantizer dcmtk_jinit8_1pass_quantizer #define jinit_2pass_quantizer dcmtk_jinit8_2pass_quantizer #define jinit_arith_decoder dcmtk_jinit8_arith_decoder #define jinit_arith_encoder dcmtk_jinit8_arith_encoder #define jinit_c_codec dcmtk_jinit8_c_codec #define jinit_c_coef_controller dcmtk_jinit8_c_coef_controller #define jinit_c_diff_controller dcmtk_jinit8_c_diff_controller #define jinit_c_main_controller dcmtk_jinit8_c_main_controller #define jinit_c_master_control dcmtk_jinit8_c_master_control #define jinit_c_prep_controller dcmtk_jinit8_c_prep_controller #define jinit_c_scaler dcmtk_jinit8_c_scaler #define jinit_color_converter dcmtk_jinit8_color_converter #define jinit_color_deconverter dcmtk_jinit8_color_deconverter #define jinit_compress_master dcmtk_jinit8_compress_master #define jinit_d_codec dcmtk_jinit8_d_codec #define jinit_d_coef_controller dcmtk_jinit8_d_coef_controller #define jinit_d_diff_controller dcmtk_jinit8_d_diff_controller #define jinit_d_main_controller dcmtk_jinit8_d_main_controller #define jinit_d_post_controller dcmtk_jinit8_d_post_controller #define jinit_d_post_controller dcmtk_jinit8_d_post_controller #define jinit_d_scaler dcmtk_jinit8_d_scaler #define jinit_differencer dcmtk_jinit8_differencer #define jinit_downsampler dcmtk_jinit8_downsampler #define jinit_forward_dct dcmtk_jinit8_forward_dct #define jinit_input_controller dcmtk_jinit8_input_controller #define jinit_inverse_dct dcmtk_jinit8_inverse_dct #define jinit_lhuff_decoder dcmtk_jinit8_lhuff_decoder #define jinit_lhuff_encoder dcmtk_jinit8_lhuff_encoder #define jinit_lossless_c_codec dcmtk_jinit8_lossless_c_codec #define jinit_lossless_d_codec dcmtk_jinit8_lossless_d_codec #define jinit_lossy_c_codec dcmtk_jinit8_lossy_c_codec #define jinit_lossy_d_codec dcmtk_jinit8_lossy_d_codec #define jinit_marker_reader dcmtk_jinit8_marker_reader #define jinit_marker_writer dcmtk_jinit8_marker_writer #define jinit_master_decompress dcmtk_jinit8_master_decompress #define jinit_memory_mgr dcmtk_jinit8_memory_mgr #define jinit_merged_upsampler dcmtk_jinit8_merged_upsampler #define jinit_phuff_decoder dcmtk_jinit8_phuff_decoder #define jinit_phuff_encoder dcmtk_jinit8_phuff_encoder #define jinit_shuff_decoder dcmtk_jinit8_shuff_decoder #define jinit_shuff_encoder dcmtk_jinit8_shuff_encoder #define jinit_undifferencer dcmtk_jinit8_undifferencer #define jinit_upsampler dcmtk_jinit8_upsampler #define jpeg_CreateCompress dcmtk_jpeg8_CreateCompress #define jpeg_CreateDecompress dcmtk_jpeg8_CreateDecompress #define jpeg_abort dcmtk_jpeg8_abort #define jpeg_abort_compress dcmtk_jpeg8_abort_compress #define jpeg_abort_decompress dcmtk_jpeg8_abort_decompress #define jpeg_add_quant_table dcmtk_jpeg8_add_quant_table #define jpeg_alloc_huff_table dcmtk_jpeg8_alloc_huff_table #define jpeg_alloc_quant_table dcmtk_jpeg8_alloc_quant_table #define jpeg_calc_output_dimensions dcmtk_jpeg8_calc_output_dimensions #define jpeg_consume_input dcmtk_jpeg8_consume_input #define jpeg_copy_critical_parameters dcmtk_jpeg8_copy_critical_parameters #define jpeg_default_colorspace dcmtk_jpeg8_default_colorspace #define jpeg_destroy dcmtk_jpeg8_destroy #define jpeg_destroy_compress dcmtk_jpeg8_destroy_compress #define jpeg_destroy_decompress dcmtk_jpeg8_destroy_decompress #define jpeg_fdct_float dcmtk_jpeg8_fdct_float #define jpeg_fdct_ifast dcmtk_jpeg8_fdct_ifast #define jpeg_fdct_islow dcmtk_jpeg8_fdct_islow #define jpeg_fill_bit_buffer dcmtk_jpeg8_fill_bit_buffer #define jpeg_finish_compress dcmtk_jpeg8_finish_compress #define jpeg_finish_decompress dcmtk_jpeg8_finish_decompress #define jpeg_finish_output dcmtk_jpeg8_finish_output #define jpeg_free_large dcmtk_jpeg8_free_large #define jpeg_free_small dcmtk_jpeg8_free_small #define jpeg_gen_optimal_table dcmtk_jpeg8_gen_optimal_table #define jpeg_get_large dcmtk_jpeg8_get_large #define jpeg_get_small dcmtk_jpeg8_get_small #define jpeg_has_multiple_scans dcmtk_jpeg8_has_multiple_scans #define jpeg_huff_decode dcmtk_jpeg8_huff_decode #define jpeg_idct_1x1 dcmtk_jpeg8_idct_1x1 #define jpeg_idct_2x2 dcmtk_jpeg8_idct_2x2 #define jpeg_idct_4x4 dcmtk_jpeg8_idct_4x4 #define jpeg_idct_float dcmtk_jpeg8_idct_float #define jpeg_idct_ifast dcmtk_jpeg8_idct_ifast #define jpeg_idct_islow dcmtk_jpeg8_idct_islow #define jpeg_input_complete dcmtk_jpeg8_input_complete #define jpeg_make_c_derived_tbl dcmtk_jpeg8_make_c_derived_tbl #define jpeg_make_d_derived_tbl dcmtk_jpeg8_make_d_derived_tbl #define jpeg_mem_available dcmtk_jpeg8_mem_available #define jpeg_mem_init dcmtk_jpeg8_mem_init #define jpeg_mem_term dcmtk_jpeg8_mem_term #define jpeg_new_colormap dcmtk_jpeg8_new_colormap #define jpeg_open_backing_store dcmtk_jpeg8_open_backing_store #define jpeg_quality_scaling dcmtk_jpeg8_quality_scaling #define jpeg_read_coefficients dcmtk_jpeg8_read_coefficients #define jpeg_read_header dcmtk_jpeg8_read_header #define jpeg_read_raw_data dcmtk_jpeg8_read_raw_data #define jpeg_read_scanlines dcmtk_jpeg8_read_scanlines #define jpeg_resync_to_restart dcmtk_jpeg8_resync_to_restart #define jpeg_save_markers dcmtk_jpeg8_save_markers #define jpeg_set_colorspace dcmtk_jpeg8_set_colorspace #define jpeg_set_defaults dcmtk_jpeg8_set_defaults #define jpeg_set_linear_quality dcmtk_jpeg8_set_linear_quality #define jpeg_set_marker_processor dcmtk_jpeg8_set_marker_processor #define jpeg_set_quality dcmtk_jpeg8_set_quality #define jpeg_simple_lossless dcmtk_jpeg8_simple_lossless #define jpeg_simple_progression dcmtk_jpeg8_simple_progression #define jpeg_start_compress dcmtk_jpeg8_start_compress #define jpeg_start_decompress dcmtk_jpeg8_start_decompress #define jpeg_start_output dcmtk_jpeg8_start_output #define jpeg_std_error dcmtk_jpeg8_std_error #define jpeg_stdio_dest dcmtk_jpeg8_stdio_dest #define jpeg_stdio_src dcmtk_jpeg8_stdio_src #define jpeg_suppress_tables dcmtk_jpeg8_suppress_tables #define jpeg_write_coefficients dcmtk_jpeg8_write_coefficients #define jpeg_write_m_byte dcmtk_jpeg8_write_m_byte #define jpeg_write_m_header dcmtk_jpeg8_write_m_header #define jpeg_write_marker dcmtk_jpeg8_write_marker #define jpeg_write_raw_data dcmtk_jpeg8_write_raw_data #define jpeg_write_scanlines dcmtk_jpeg8_write_scanlines #define jpeg_write_tables dcmtk_jpeg8_write_tables #define jround_up dcmtk_jround8_up #define jzero_far dcmtk_jzero8_far
Issue report and pull request provided 2024-01-23 by Kevin Leonardic <kevin@leonardic.de>.
Updated by Marco Eichelberg over 1 year ago
- Status changed from New to Closed
- Assignee set to Marco Eichelberg
- % Done changed from 0 to 100
- Estimated time set to 2:00 h
Closed by commit #5195244f5.