gtest and opencv_ts have duplicate symbols (Bug #1608)


Added by Ethan Rublee about 13 years ago. Updated about 13 years ago.


Status:Done Start date:2012-02-19
Priority:Normal Due date:
Assignee:Andrey Kamaev % Done:

0%

Category:build/install
Target version:2.4.0
Affected version: Operating System:
Difficulty: HW Platform:
Pull request:

Description

The default OpenCV_LIBS contain opencv_ts. When writing gtests in client code that also uses opencv, this leads to duplicate symbols, depending on how the
library is linked to gtest. The duplicate symbols cause a core dump.

The following is typical cmake for using gtest and opencv together.

cmake_minimum_required(VERSION 2.8)

find_package(OpenCV REQUIRED)
find_package(GTest REQUIRED)

include_directories(
  ${GTEST_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)
add_executable(unit
  main.cpp
)

target_link_libraries(unit
  ${GTEST_LIBRARIES}
  ${OpenCV_LIBS}
  )

One fix for this would be to not export opencv_ts in the OpenCV_LIBS variable in OpenCVConfig.cmake

The other would be to properly namespace the gtest that ships with opencv so that these symbols are not duplicates.


Associated revisions

Revision 504262d3
Added by Andrey Kamaev about 13 years ago

Fixed #1608

Revision 19dca324
Added by Andrey Pavlenko over 11 years ago

Merge pull request #1608 from alalek:fix_warn_upd_haar

Revision e8451848
Added by Alexander Alekhin over 11 years ago

Merge remote-tracking branch 'upstream/2.4' into merge-2.4

  • #1538 from StevenPuttemans:bugfix_3283
  • #1545 from alalek:ocl_test_fix_rng
  • #1551 from alalek:cmake_install_win
  • #1570 from ilya-lavrenov:ipp_warn_fix
  • #1573 from alalek:perf_simple_strategy
  • #1574 from alalek:svm_workaround
  • #1576 from alalek:ocl_fix_cl_double
  • #1577 from ilya-lavrenov:ocl_setto_opencl12
  • #1578 from asmorkalov:android_fd_cp_fix
  • #1579 from ilya-lavrenov:ocl_norm
  • #1582 from sperrholz:ocl-arithm-additions
  • #1586 from ilya-lavrenov:ocl_setto_win_fix
  • #1589 from ilya-lavrenov:pr1582_fix
  • #1591 from alalek:ocl_remove_cl_hpp_h
  • #1592 from alalek:ocl_program_cache_update
  • #1593 from ilya-lavrenov:ocl_war_on_double
  • #1594 from ilya-lavrenov:ocl_perf
  • #1595 from alalek:cl_code_cleanup
  • #1596 from alalek:test_fix_run_py
  • #1597 from alalek:ocl_fix_cleanup
  • #1598 from alalek:ocl_fix_build_mac
  • #1599 from ilya-lavrenov:ocl_mac_kernel_warnings
  • #1601 from ilya-lavrenov:ocl_fix_tvl1_and_sparse
  • #1602 from alalek:ocl_test_dump_info
  • #1603 from ilya-lavrenov:ocl_disable_svm_noblas
  • #1605 from alalek:ocl_fixes
  • #1606 from ilya-lavrenov:ocl_imgproc
  • #1607 from ilya-lavrenov:ocl_fft_cleanup
  • #1608 from alalek:fix_warn_upd_haar
  • #1609 from ilya-lavrenov:ocl_some_optimization
  • #1610 from alalek:ocl_fix_perf_kalman
  • #1612 from alalek:ocl_fix_string_info
  • #1614 from ilya-lavrenov:ocl_svm_misprint
  • #1616 from ilya-lavrenov:ocl_cvtColor
  • #1617 from ilya-lavrenov:ocl_info
  • #1622 from a0byte:2.4
  • #1625 from ilya-lavrenov:to_string

Conflicts:
cmake/OpenCVConfig.cmake
cmake/OpenCVDetectPython.cmake
cmake/OpenCVGenConfig.cmake
modules/core/CMakeLists.txt
modules/nonfree/src/surf.ocl.cpp
modules/ocl/include/opencv2/ocl/ocl.hpp
modules/ocl/include/opencv2/ocl/private/util.hpp
modules/ocl/perf/main.cpp
modules/ocl/src/arithm.cpp
modules/ocl/src/cl_operations.cpp
modules/ocl/src/cl_programcache.cpp
modules/ocl/src/color.cpp
modules/ocl/src/fft.cpp
modules/ocl/src/filtering.cpp
modules/ocl/src/gemm.cpp
modules/ocl/src/haar.cpp
modules/ocl/src/imgproc.cpp
modules/ocl/src/matrix_operations.cpp
modules/ocl/src/pyrlk.cpp
modules/ocl/src/split_merge.cpp
modules/ocl/src/svm.cpp
modules/ocl/test/main.cpp
modules/ocl/test/test_fft.cpp
modules/ocl/test/test_moments.cpp
modules/ocl/test/test_objdetect.cpp
modules/ocl/test/test_optflow.cpp
modules/ocl/test/utility.hpp
modules/python/CMakeLists.txt
modules/ts/include/opencv2/ts.hpp
modules/ts/src/ts_perf.cpp
samples/android/face-detection/jni/DetectionBasedTracker_jni.cpp

History

Updated by Ethan Rublee about 13 years ago

Ok this can be alleviated by using the component method for find_package

find_package(OpenCV REQUIRED core highgui) #not ts

Updated by Andrey Kamaev about 13 years ago

Unfortunately gtest is not designed for namespacing. It assumes that testing is a top level namespace.

I've committed a small fix which excludes ts module from the default list if GTest is used as separate package. But it requires GTest to be found before the OpenCV, e.g.

find_package(GTest REQUIRED)
find_package(OpenCV REQUIRED)
  • Status changed from Open to Done
  • Target version set to 2.4.0
  • Assignee changed from Vadim Pisarevsky to Andrey Kamaev

Also available in: Atom PDF