The declaration with extern specifies to that unit of compilation
information about these arrays, but the definition (when memory is actually
reserved as well) happens in another unit.

As I mentioned, GCC usually updates how it handles somethings based on the
spec of the C language over time. In this particular case, the issue was
caused by an updated handling of extern in GCC 10:
https://gcc.gnu.org/gcc-10/porting_to.html

See the "default to -fno-common" section at the very beginning of that page
to understand what the change was and why it was done.

Best regards,




On Wed, Jul 12, 2023 at 5:08 AM James Dempsey <james.e.demp...@gmail.com>
wrote:

> Thank you for your quick attention to this, Luis, that certain works and
> compiles successfully.
>
> One question, again not a C programmer, but why both `extern` the
> "declaration" and move the "definition", if those are the correct terms?
>
> On Tue, Jul 11, 2023 at 10:05 PM Luis Felipe Strano Moraes <
> luis.str...@gmail.com> wrote:
>
>> That is perfectly fine, the other way of fixing it would be this way
>> which was apparently already committed to the git tree but no new release
>> was made that includes it:
>>
>> http://git.savannah.gnu.org/cgit/gnugo.git/commit/?h=ttn-maint&id=54b697abcd2ccfb2fe0f5a7454da4a14118483ca
>>
>> The reason this error was encountered was due to changes in GCC as it
>> evolves where it starts treating some things differently, and it has been a
>> long time since GNU Go 3.8 was released.
>>
>> Best regards,
>>
>>
>> On Tue, Jul 11, 2023 at 5:19 PM James Dempsey <james.e.demp...@gmail.com>
>> wrote:
>>
>>> I ran into an issue with compiling GNU Go 3.8 on Amazon Linux 2023 (gcc
>>> (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4)).
>>>
>>> I receive the follow error when running `./configure` and `make`:
>>>
>>> gcc  -g -O2   -o mkpat  mkpat.o transform.o dfa.o ../utils/libutils.a -lm
>>>> /usr/bin/ld:
>>>> transform.o:/home/ec2-user/kgsGtp-3.5.23/gnugo-3.8/patterns/../engine/liberty.h:861:
>>>> multiple definition of `meaningless_white_moves';
>>>> mkpat.o:/home/ec2-user/kgsGtp-3.5.23/gnugo-3.8/patterns/../engine/liberty.h:861:
>>>> first defined here
>>>> /usr/bin/ld:
>>>> transform.o:/home/ec2-user/kgsGtp-3.5.23/gnugo-3.8/patterns/../engine/liberty.h:860:
>>>> multiple definition of `meaningless_black_moves';
>>>> mkpat.o:/home/ec2-user/kgsGtp-3.5.23/gnugo-3.8/patterns/../engine/liberty.h:860:
>>>> first defined here
>>>> /usr/bin/ld:
>>>> dfa.o:/home/ec2-user/kgsGtp-3.5.23/gnugo-3.8/patterns/../engine/liberty.h:861:
>>>> multiple definition of `meaningless_white_moves';
>>>> mkpat.o:/home/ec2-user/kgsGtp-3.5.23/gnugo-3.8/patterns/../engine/liberty.h:861:
>>>> first defined here
>>>> /usr/bin/ld:
>>>> dfa.o:/home/ec2-user/kgsGtp-3.5.23/gnugo-3.8/patterns/../engine/liberty.h:860:
>>>> multiple definition of `meaningless_black_moves';
>>>> mkpat.o:/home/ec2-user/kgsGtp-3.5.23/gnugo-3.8/patterns/../engine/liberty.h:860:
>>>> first defined here
>>>> collect2: error: ld returned 1 exit status
>>>> make[2]: *** [Makefile:371: mkpat] Error 1
>>>> make[2]: Leaving directory
>>>> '/home/ec2-user/kgsGtp-3.5.23/gnugo-3.8/patterns'
>>>> make[1]: *** [Makefile:232: all-recursive] Error 1
>>>> make[1]: Leaving directory '/home/ec2-user/kgsGtp-3.5.23/gnugo-3.8'
>>>> make: *** [Makefile:168: all] Error 2
>>>
>>>
>>> My solution was to move the following lines from `liberty.h` to
>>> `unconditional.c`:
>>>
>>> /* Unconditionally meaningless moves. */
>>>> int meaningless_black_moves[BOARDMAX];
>>>> int meaningless_white_moves[BOARDMAX];
>>>
>>>
>>> This change allowed me to compile successfully.
>>>
>>> I am not a C programmer.  Is this a reasonable change to make
>>> and does not functionally affect the program?  Why was this error
>>> encountered in the first place?
>>>
>>> Thank you.
>>> _______________________________________________
>>> gnugo-devel mailing list
>>> gnugo-devel@gnu.org
>>> https://lists.gnu.org/mailman/listinfo/gnugo-devel
>>>
>>
>>
>> --
>> Luís Felipe Strano Moraes
>> _______________________________________________
>> gnugo-devel mailing list
>> gnugo-devel@gnu.org
>> https://lists.gnu.org/mailman/listinfo/gnugo-devel
>>
> _______________________________________________
> gnugo-devel mailing list
> gnugo-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/gnugo-devel
>


-- 
Luís Felipe Strano Moraes
_______________________________________________
gnugo-devel mailing list
gnugo-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/gnugo-devel

Reply via email to