johnsonjh / duma

duma: Detect Unintended Memory Access (D.U.M.A.) - A Red-Zone memory allocator
https://github.com/johnsonjh/duma
GNU General Public License v2.0
101 stars 10 forks source link

CXX Standard #174

Open kheaactua opened 2 years ago

kheaactua commented 2 years ago

Without altering the C++ Standard in the CMake file, I kept running into errors like:

duma/src/dumapp.cpp:198:18: error: declaration of 'void* operator new(size_t, const std::nothrow_t&) throw ()' has a different exception specifier                                                                 
 void *DUMA_CDECL operator new(DUMA_SIZE_T size,                                                                                                                                                                                              
                  ^~~~~~~~                                                                                                                                                                                                                    
In file included from local/duma/src/dumapp.cpp:38:                                                                                                                                                                      
/duma/dumapp.h:94:18: note: from previous declaration 'void* operator new(size_t, const std::nothrow_t&)'                                                                                                           
 void *DUMA_CDECL operator new(DUMA_SIZE_T, const std::nothrow_t &) throw(); 

In addition, to build on QNX, I also had to tweak how threads were linked against:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 18d9eec..f3b4499 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,8 +3,10 @@ project(DUMA C CXX)

 # See README.md for help building and using DUMA

-set(CMAKE_CXX_STANDARD 98)
-set(CMAKE_CXX_STANDARD_REQUIRED off)
+find_package(Threads)
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)

 if(POLICY CMP0063)
   cmake_policy(SET CMP0063 NEW)
@@ -190,7 +192,7 @@ endif()
 if (NOT DUMA_WITH_THREAD_SAFETY)
   target_compile_definitions(DUMA_STATIC PRIVATE DUMA_NO_THREAD_SAFETY)
 else()
-  target_link_libraries(DUMA_STATIC PUBLIC pthread)
+  target_link_libraries(DUMA_STATIC PUBLIC $<$<NOT:$<PLATFORM_ID:QNX>>:Threads::Threads>)
 endif()
 if (NOT DUMA_WITH_STRERROR)
   target_compile_definitions(DUMA_STATIC PRIVATE DUMA_NO_STRERROR)
@@ -236,7 +238,7 @@ if (WIN32 AND MINGW)
   message(STATUS "MINGW")
 else()
   message(STATUS "target link pthread to DUMA_SHARED")
-  target_link_libraries( DUMA_SHARED PUBLIC pthread )
+  target_link_libraries( DUMA_SHARED PUBLIC $<$<NOT:$<PLATFORM_ID:QNX>>:Threads::Threads> )
 endif()
johnsonjh commented 2 years ago

Thanks for the report (and building on QNX).

I'll try to take a look at this over the weekend.

kheaactua commented 2 years ago

Thanks. I have it set up to work on QNX now, I have it working on small test apps, but I'm stuck on the word alignment issue for a bigger lib.

Anyways, I'm happy to help of I can in any way.