Project

General

Profile

Actions

Bug #1103

closed

DCMTK symbols conflict with recent versions of libjpeg-turbo

Added by Marco Eichelberg over 1 year ago. Updated over 1 year ago.

Status:
Closed
Priority:
Normal
Category:
-
Target version:
-
Start date:
2024-01-24
Due date:
% Done:

100%

Estimated time:
2:00 h
Module:
dcmjpeg
Operating System:
Compiler:

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 <>.

Actions #1

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.

Actions

Also available in: Atom PDF