Shared Lib und Testapplikation
-
Hallo!
Es geht um C++ in Zusammenhang mit CMake. Da es eher C++ ist, habe ich dieses
Forum gewählt: Ich compiliere eine eigene Library mit Hilfe von CMake, wobei
in der CMakeLists.txt, das hier verwendet wird:add_definitions(-O3 -Wextra -Wunused -Wall -ansi -pedantic-errors -frounding-math -g )
Wird nun die Test-Applikation, die diese Library verwendet, mit den gleichen
Optionen compiliert, so funktioniert sie. Verwende ich aber für die Applikationadd_definitions(-O3 -Wextra -Wunused -Wall -ansi -pedantic-errors -frounding-math -DNDEBUG )
so gibt es Segfaults, und das hängt sicher nicht mit den Assertions zusammen.
Mir scheint, daß der Code dann inkompatibel wird. Kann es sein, daß ich da
noch Compiler-/Linkerflags wie -fPIC oder andere benötige?Hier folgt die gesamte CMakeLists.txt für die Library. Jeder Hinweis wird
dankend angenommen. Ich starte gerade erst mit CMake.cmake_minimum_required(VERSION 2.6) # Name of the project project(FD_2D) set(CMAKE_VERBOSE_MAKEFILE ON) # Find boost FIND_PACKAGE( Boost COMPONENTS program_options filesystem system REQUIRED ) INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} ) add_definitions(-O3 -Wextra -Wunused -Wall -ansi -pedantic-errors -frounding-math -g ) set(LIB_SRC HCube2.cpp FD_2D.cpp Circle2.cpp Label.cpp Segment2.cpp ExactTest.cpp tools.cpp Color.cpp Dt2.cpp Vis2.cpp ) add_library(fd2d SHARED ${LIB_SRC}) TARGET_LINK_LIBRARIES( dt2 ${Boost_LIBRARIES} ) # install library INSTALL( TARGETS fd2d DESTINATION lib PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) # install headers INSTALL(FILES Point2.h Triangle2.h TaVeIt.h Vis2.h FD_2D.h common.h tools.h Circle2.h Segment2.h Color.h Label.h Bbox2.h DESTINATION include/gm PERMISSIONS OWNER_READ GROUP_READ WORLD_READ )Danke, lg
-
NDEBUG steuert nicht nur Assertions. Ggf. hast du Header in der Lib, die mit NDEBUG ein anderes binäres Layout erzeugen, z.B. durch irgendwelche #ifdefs. Oder der Compiler macht das von sich aus, weil er mit NDEBUG anders arbeitet. Du müsstest von der Lib dann debug und release-Versionen haben, und je nach NDEBUG gegen die passende linken.
-
pumuckl schrieb:
NDEBUG steuert nicht nur Assertions. Ggf. hast du Header in der Lib, die mit NDEBUG ein anderes binäres Layout erzeugen, z.B. durch irgendwelche #ifdefs. Oder der Compiler macht das von sich aus, weil er mit NDEBUG anders arbeitet. Du müsstest von der Lib dann debug und release-Versionen haben, und je nach NDEBUG gegen die passende linken.
Das war ein Super-Volltreffer, danke! Ich hatte
class Triangle { ...bla #ifndef NDEBUG unsigned debug_triangleLabel; #endif ...bla };in einem Header. Das hätte ich wohl noch sehr lange gesucht.
Schönen Tag! / lg