Project

General

Profile

Actions

Support Request #13479

closed

Error compiling examples from Display Toolbox

Added by hidden about 3 years ago. Updated over 2 years ago.

Status:
Closed
Priority:
Normal
Customer:
CARIAD
Department:
G3-3
Requester's Priority:
Normal
Support Level:
3rd Level
Resolution:
Solved Issue
Platform:
Windows 10 64bit
Topic:
DeviceTB::Common
FAQ Links:

Description

Supportanfrage

Ich habe aus den Display-Toolbox-Examples "videodrawer" herauskopiert und mit cmake konfiguriert:

-- The C compiler identification is MSVC 19.16.27044.0
-- The CXX compiler identification is MSVC 19.16.27044.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenGL: opengl32
-- Could NOT find base (missing: base_DIR)

-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/u2phprb/Desktop/videodrawer/build

Beim Bauen erhalte ich:

...\videodrawer\video_drawer.cpp(18): error C2065: 'DISPTB_VERSION_MAJOR': undeclared identifier

Was mache ich hier falsch? Ich stelle mir vor, solche Example-Projekte als Absprungbasis nutzen zu können.

Was bedeutet die Warnung mit "base_DIR"?

Lösung

Im Source File des Drawers, wenn das Plugin erzeugt wird (ADTF_PLUGIN_VERSION) wird die Version der Display TB gesetzt.
Die darin verwendeten Makros kommen aus der root cmake Datei der Toolbox.
Da du nicht den Weg darüber gehst, stehen diese nicht zur Verfügung -> Build crasht (normaler C++/CMake Problem, die IDE müsste auch warnen dass unbekannt).

Da du diese Versionstrings aber denke ich nicht verwendest sondern eigene Versionierung, kannst du das für deinen Drawer/Template gleich abändenr, zb:

ADTF_PLUGIN_VERSION("Demo 2D Video Drawer Plugin", 
                    disptb,
                    0,
                    8,
                    15,
                    cVideoDrawer)

Was bedeutet die Warnung mit "base_DIR"?

Es handelt sich hierbei um das pkg base der Display TB, das ist ein internes CMake Problem, ich habe dafür ein Ticket angelegt, damit das Warning behoben wird:
  • [ADISTB-1141] - Warning that base_DIR could no be found

Spielt für dich aber keine Rolle.

Beim Bauen mit -DCMAKE_BUILD_TYPE=Release erhalte ich hingegen Release/Debug-Konflikte. Offensichtlich wird "drawerd.lib", "graphicsd.lib" gegen die Release-Lib gelinkt:

drawerd.lib(drawer.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in video_drawer.cpp.obj
drawerd.lib(drawer.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MDd_DynamicDebug' doesn't match value 'MD_DynamicRelease' in video_drawer.cpp.obj
drawerd.lib(drawer_manager.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in video_drawer.cpp.obj
drawerd.lib(drawer_manager.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MDd_DynamicDebug' doesn't match value 'MD_DynamicRelease' in video_drawer.cpp.obj
graphicsd.lib(image.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in video_drawer.cpp.obj
graphicsd.lib(image.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MDd_DynamicDebug' doesn't match value 'MD_DynamicRelease' in video_drawer.cpp.obj
graphicsd.lib(color.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in video_drawer.cpp.obj
graphicsd.lib(color.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MDd_DynamicDebug' doesn't match value 'MD_DynamicRelease' in video_drawer.cpp.obj
   Creating library video_drawer.lib and object video_drawer.exp
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library
drawerd.lib(drawer.obj) : error LNK2019: unresolved external symbol __imp__invalid_parameter referenced in function "void * __cdecl std::_Allocate_manually_vector_aligned<struct std::_Default_allocate_traits>(unsigned __int64)" (??$_Allocate_manually_vector_aligned@U_Default_allocate_traits@std@@@std@@YAPEAX_K@Z)
...

Wißt ihr, was ich hier falsch mache?

Ich nehme an du baust die Examples wieder self-contained (so wie den Drawer) ?
Unsere Lieferungen beinhalten immer RelWithDebInfo und Debug targets, d.h. CMake kommt hier durcheinander wenn du Release oder MinSizeRel bauen möchtest:
  • Build type Release ? OK ich suche mal nach Release... RelWithDebInfo ? Kenn ich nicht, dann muss es das andere sein -> debug -> Linker Error

Um dem Abhilfe zu schaffen, mappen wir den sämtliche optimierten Targets, wenn du allerdings nicht von der Haupt Cmake losgehst, geht dir das verloren:

set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO RelWithDebInfo Release MinSizeRelease "")
set(CMAKE_MAP_IMPORTED_CONFIG_RELEASE Release RelWithDebInfo MinSizeRelease "")
set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL MinSizeRelease Release RelWithDebInfo "")
Actions

Also available in: Atom PDF