[Nauty] nauty and Traces in modern C++

Johann Birnick johann.birnick at hotmail.de
Tue Feb 20 10:07:25 AEDT 2024


Okay forget the part with "same number of vertices and edges", otherwise 
they won't be isomorphic of course. I also now found the part of the 
documentation where it says that I should probably apply `sortlists_sg` 
if I understand it correctly. But I'm still interested if there are 
special cases where I can avoid this?

Johann

On 2/19/24 00:09, Johann Birnick wrote:
> Dear Brendan,
>
> thank you for your tips. I figured it was just a linking error, now 
> everything works fine.
>
> By the way, I just noticed that there is a minor typo in the 
> documentation: On page 18, first line, it reads 'sparesgraph'.
>
> Johann
>
> On 2/9/24 16:47, Brendan McKay via Nauty wrote:
>> Hi Johann,
>>
>> You need the macros, but you can adjust the meaning in some cases.
>>
>> First, make sure your code is reading the correct nauty.h.
>>
>> The meaning of NORET_ATTR is chosen by the configure script.  In the 
>> case
>> of a modern C compiler (*), it will be defined as _Noreturn which is 
>> a function
>> attribute specifying that the function never returns (in this case 
>> because it
>> always calls exit()).  It helps optimization.
>>
>> My guess is that your C++ compiler doesn't understand _Noreturn, so 
>> the declaration
>> of gt_abort is deemed invalid and then everything that uses gt_abort is
>> rejected as well; DYNALLOC1 in this case.
>>
>> You can try selecting a more recent C++ version in your build 
>> instructions.
>>
>> If all else fails, find this line in nauty-h.in:
>>     #define NORET_ATTR @ac_cv_noret@
>> and replace if by:
>>     #define NORET_ATTR
>> Then run ./configure again.  Lots of people use nauty in C++, though 
>> I am
>> not one of them.
>>
>> I can modify the code to disable _Noreturn in the event of C++ 
>> compilation,
>> but if anyone else has suggestions about this I'd like to hear them.
>>
>> Brendan.
>>
>> (*) I read on the web that _Noreturn was introduced in C11, but it is 
>> present in
>> my copy of the C99 standard. Was it dropped at the last minute, perhaps?
>>
>>
>>
>> On 10/2/2024 11:01 am, Johann Birnick via Nauty wrote:
>>> Hello,
>>>
>>> I want to use nauty and Traces in a modern C++ project, which uses 
>>> CMake for building. How to do that appropriately? In particular:
>>>
>>> 1. In my current setup, when I want to run an example from the
>>>    documentation, I get the following error:
>>>
>>>    /usr/include/nauty/gtools.h:302:24: error: expected initializer
>>>    before ‘gt_abort’
>>>       302 | extern void NORET_ATTR gt_abort(const char*);
>>>           |                        ^~~~~~~~
>>>    /home/johann/Coding/MabreSolve/main.cpp: In function ‘int main()’:
>>>    /home/johann/Coding/MabreSolve/main.cpp:31:13: error: ‘gt_abort’ was
>>>    not declared in this scope; did you mean ‘gt_abort_1’?
>>>        31 |             DYNALLOC1(int, lab1, lab1_sz, n, "malloc");
>>>           |             ^~~~~~~~~
>>>
>>>    Do you have any idea what's the problem and how to fix it?
>>>
>>> 2. I guess in modern C++ one shouldn't use all these in capital letters
>>>    written macros and global variables (DYNALLOC1, SG_ALLOC,
>>>    NAUTYVERSIONID, and so on). Is there a way to do this the 'modern 
>>> way'?
>>>
>>> Thank you very much in advance!
>>>
>>> Johann B.
>>> _______________________________________________
>>> Nauty mailing list
>>> Nauty at anu.edu.au
>>> https://mailman.anu.edu.au/mailman/listinfo/nauty
>>
>> _______________________________________________
>> Nauty mailing list
>> Nauty at anu.edu.au
>> https://mailman.anu.edu.au/mailman/listinfo/nauty


More information about the Nauty mailing list