[Nauty] nauty and Traces in modern C++

Johann Birnick johann.birnick at hotmail.de
Mon Feb 19 19:09:49 AEDT 2024


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