windows - Erlang build error: Ingen native ethread implementation fundet

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har installeret VS Community 2013 x86 + Cygwin, og jeg har fulgt instruktionerne til at opbygge en 32bit version af erlang.


Når jeg udfører ./opt\_build boot -a, får jeg følgende fejl:



  ./include/internal/ethread.h:381:2: error: #error 'Ingen native ethread implementation fundet. Hvis du vil bruge fallbacks, skal du deaktivere native ethread support med configure.'
   #error 'Ingen implementering af native ethread fundet. Hvis du vil bruge fallbacks, skal du deaktivere native ethread support med configure.'



Nogen har nogensinde se denne fejl? Hvad er virkningerne af at deaktivere ethread?


Flere logfiler:


Microsoft (R) Windows (R) Resource Compiler Version 6.3.9600.17336
Copyright (C) Microsoft Corporation.  All rights reserved.

 EMU\_CC obj/win32/opt/smp/beam\_emu.o
In file included from beam/erl\_threads.h:265:0,
                 from beam/erl\_smp.h:28,
                 from beam/sys.h:491,
                 from beam/beam\_emu.c:26:
../include/internal/ethread.h:381:2: error: #error "No native ethread implementation found. If you want to use fallbacks you have to disable native ethread support with configure."
 #error "No native ethread implementation found. If you want to use fallbacks you have to disable native ethread support with configure."
  ^~~~~
In file included from beam/beam\_load.h:25:0,
                 from beam/export.h:81,
                 from beam/global.h:33,
                 from beam/beam\_emu.c:28:
beam/erl\_process.h: In function 'erts\_get\_runq\_proc':
beam/erl\_process.h:2159:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     return (ErtsRunQueue *) erts\_atomic\_read\_nob(&p->run\_queue);
            ^
In file included from beam/erl\_process.h:2347:0,
                 from beam/beam\_load.h:25,
                 from beam/export.h:81,
                 from beam/global.h:33,
                 from beam/beam\_emu.c:28:
beam/erl\_process\_lock.h: In function 'erts\_pix2proc':
beam/erl\_process\_lock.h:939:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     proc = (Process *) erts\_ptab\_pix2intptr\_nob(&erts\_proc, ix);
            ^
beam/erl\_process\_lock.h: In function 'erts\_proc\_lookup\_raw':
beam/erl\_process\_lock.h:952:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     proc = (Process *) erts\_ptab\_pix2intptr\_ddrb(&erts\_proc,
            ^
In file included from beam/erl\_port.h:30:0,
                 from beam/global.h:44,
                 from beam/beam\_emu.c:28:
beam/erl\_port\_task.h: In function 'erts\_port\_task\_handle\_init':
beam/erl\_port\_task.h:154:36: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
     erts\_smp\_atomic\_init\_nob(pthp, (erts\_aint\_t) NULL);
                                    ^
beam/erl\_port\_task.h: In function 'erts\_port\_task\_is\_scheduled':
beam/erl\_port\_task.h:160:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     return ((void *) erts\_smp\_atomic\_read\_acqb(pthp)) != NULL;
             ^
In file included from beam/global.h:44:0,
                 from beam/beam\_emu.c:28:
beam/erl\_port.h: In function 'erts\_port\_runq':
beam/erl\_port.h:221:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     rq1 = (ErtsRunQueue *) erts\_smp\_atomic\_read\_nob(&prt->run\_queue);
           ^
beam/erl\_port.h:226:8: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
  rq2 = (ErtsRunQueue *) erts\_smp\_atomic\_read\_nob(&prt->run\_queue);
        ^
beam/erl\_port.h: In function 'erts\_pix2port':
beam/erl\_port.h:475:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     prt = (Port *) erts\_ptab\_pix2intptr\_nob(&erts\_port, ix);
           ^
beam/erl\_port.h: In function 'erts\_port\_lookup\_raw':
beam/erl\_port.h:489:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     prt = (Port *) erts\_ptab\_pix2intptr\_ddrb(&erts\_port,
           ^
beam/erl\_port.h: In function 'erts\_id2port':
beam/erl\_port.h:518:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     prt = (Port *) erts\_ptab\_pix2intptr\_ddrb(&erts\_port,
           ^
beam/erl\_port.h: In function 'erts\_id2port\_sflgs':
beam/erl\_port.h:552:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     prt = (Port *) erts\_ptab\_pix2intptr\_ddrb(&erts\_port,
           ^
beam/erl\_port.h: In function 'erts\_thr\_id2port\_sflgs':
beam/erl\_port.h:611:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     prt = (Port *) erts\_ptab\_pix2intptr\_ddrb(&erts\_port,
           ^
beam/beam\_emu.c: In function 'process\_main':
beam/beam\_emu.c:768:17: warning: right shift count >= width of type [-Wshift-count-overflow]
       if ((\_res >> (8*sizeof(Uint))) != 0) { Fail; } 
                 ^
beam/beam\_emu.c:4068:7: note: in expansion of macro 'BsSafeMul'
       BsSafeMul(Arg2, Unit, goto system\_limit, tmp\_arg1);
       ^~~~~~~~~
beam/beam\_emu.c:768:17: warning: right shift count >= width of type [-Wshift-count-overflow]
       if ((\_res >> (8*sizeof(Uint))) != 0) { Fail; } 
                 ^
beam/beam\_emu.c:4129:3: note: in expansion of macro 'BsSafeMul'
   BsSafeMul(b, Unit, goto system\_limit, c);
   ^~~~~~~~~
beam/beam\_emu.c:768:17: warning: right shift count >= width of type [-Wshift-count-overflow]
       if ((\_res >> (8*sizeof(Uint))) != 0) { Fail; } 
                 ^
beam/beam\_emu.c:784:7: note: in expansion of macro 'BsSafeMul'
       BsSafeMul(\_uint\_size, Unit, Fail, Target); 
       ^~~~~~~~~
beam/beam\_emu.c:4649:6: note: in expansion of macro 'BsGetFieldSize'
      BsGetFieldSize(tmp\_arg2, (flags >> 3), ClauseFail(), size);
      ^~~~~~~~~~~~~~
beam/beam\_emu.c:768:17: warning: right shift count >= width of type [-Wshift-count-overflow]
       if ((\_res >> (8*sizeof(Uint))) != 0) { Fail; } 
                 ^
beam/beam\_emu.c:784:7: note: in expansion of macro 'BsSafeMul'
       BsSafeMul(\_uint\_size, Unit, Fail, Target); 
       ^~~~~~~~~
beam/beam\_emu.c:835:5: note: in expansion of macro 'BsGetFieldSize'
     BsGetFieldSize(Sz, ((Flags) >> 3), Fail, \_size);  
     ^~~~~~~~~~~~~~
win32/opt/smp/beam\_cold.h:12:5: note: in expansion of macro 'BsGetBinary\_2'
     BsGetBinary\_2(r(0), Arg(1), targ1, Arg(3), dst, StoreResult, ClauseFail());
     ^~~~~~~~~~~~~
beam/beam\_emu.c:768:17: warning: right shift count >= width of type [-Wshift-count-overflow]
       if ((\_res >> (8*sizeof(Uint))) != 0) { Fail; } 
                 ^
beam/beam\_emu.c:784:7: note: in expansion of macro 'BsSafeMul'
       BsSafeMul(\_uint\_size, Unit, Fail, Target); 
       ^~~~~~~~~
beam/beam\_emu.c:835:5: note: in expansion of macro 'BsGetFieldSize'
     BsGetFieldSize(Sz, ((Flags) >> 3), Fail, \_size);  
     ^~~~~~~~~~~~~~
win32/opt/smp/beam\_cold.h:22:5: note: in expansion of macro 'BsGetBinary\_2'
     BsGetBinary\_2(xb(Arg(1)), Arg(2), targ1, Arg(4), dst, StoreResult, ClauseFail());
     ^~~~~~~~~~~~~
beam/beam\_emu.c:768:17: warning: right shift count >= width of type [-Wshift-count-overflow]
       if ((\_res >> (8*sizeof(Uint))) != 0) { Fail; } 
                 ^
beam/beam\_emu.c:784:7: note: in expansion of macro 'BsSafeMul'
       BsSafeMul(\_uint\_size, Unit, Fail, Target); 
       ^~~~~~~~~
beam/beam\_emu.c:870:4: note: in expansion of macro 'BsGetFieldSize'
    BsGetFieldSize(Bits, Unit, Fail, \_size);   
    ^~~~~~~~~~~~~~
win32/opt/smp/beam\_cold.h:86:5: note: in expansion of macro 'BsSkipBits2'
     BsSkipBits2(r(0), xb(Arg(1)), Arg(2), ClauseFail());
     ^~~~~~~~~~~
beam/beam\_emu.c:768:17: warning: right shift count >= width of type [-Wshift-count-overflow]
       if ((\_res >> (8*sizeof(Uint))) != 0) { Fail; } 
                 ^
beam/beam\_emu.c:784:7: note: in expansion of macro 'BsSafeMul'
       BsSafeMul(\_uint\_size, Unit, Fail, Target); 
       ^~~~~~~~~
beam/beam\_emu.c:870:4: note: in expansion of macro 'BsGetFieldSize'
    BsGetFieldSize(Bits, Unit, Fail, \_size);   
    ^~~~~~~~~~~~~~
win32/opt/smp/beam\_cold.h:94:5: note: in expansion of macro 'BsSkipBits2'
     BsSkipBits2(r(0), yb(Arg(1)), Arg(2), ClauseFail());
     ^~~~~~~~~~~
beam/beam\_emu.c:768:17: warning: right shift count >= width of type [-Wshift-count-overflow]
       if ((\_res >> (8*sizeof(Uint))) != 0) { Fail; } 
                 ^
beam/beam\_emu.c:784:7: note: in expansion of macro 'BsSafeMul'
       BsSafeMul(\_uint\_size, Unit, Fail, Target); 
       ^~~~~~~~~
beam/beam\_emu.c:870:4: note: in expansion of macro 'BsGetFieldSize'
    BsGetFieldSize(Bits, Unit, Fail, \_size);   
    ^~~~~~~~~~~~~~
win32/opt/smp/beam\_cold.h:102:5: note: in expansion of macro 'BsSkipBits2'
     BsSkipBits2(xb(Arg(1)), r(0), Arg(2), ClauseFail());
     ^~~~~~~~~~~
beam/beam\_emu.c:768:17: warning: right shift count >= width of type [-Wshift-count-overflow]
       if ((\_res >> (8*sizeof(Uint))) != 0) { Fail; } 
                 ^
beam/beam\_emu.c:784:7: note: in expansion of macro 'BsSafeMul'
       BsSafeMul(\_uint\_size, Unit, Fail, Target); 
       ^~~~~~~~~
beam/beam\_emu.c:870:4: note: in expansion of macro 'BsGetFieldSize'
    BsGetFieldSize(Bits, Unit, Fail, \_size);   
    ^~~~~~~~~~~~~~
win32/opt/smp/beam\_cold.h:110:5: note: in expansion of macro 'BsSkipBits2'
     BsSkipBits2(xb(Arg(1)), xb(Arg(2)), Arg(3), ClauseFail());
     ^~~~~~~~~~~
beam/beam\_emu.c:768:17: warning: right shift count >= width of type [-Wshift-count-overflow]
       if ((\_res >> (8*sizeof(Uint))) != 0) { Fail; } 
                 ^
beam/beam\_emu.c:784:7: note: in expansion of macro 'BsSafeMul'
       BsSafeMul(\_uint\_size, Unit, Fail, Target); 
       ^~~~~~~~~
beam/beam\_emu.c:870:4: note: in expansion of macro 'BsGetFieldSize'
    BsGetFieldSize(Bits, Unit, Fail, \_size);   
    ^~~~~~~~~~~~~~
win32/opt/smp/beam\_cold.h:118:5: note: in expansion of macro 'BsSkipBits2'
     BsSkipBits2(xb(Arg(1)), yb(Arg(2)), Arg(3), ClauseFail());
     ^~~~~~~~~~~
make[3]: *** [win32/Makefile:672: obj/win32/opt/smp/beam\_emu.o] Error 1
make[3]: Leaving directory '/cygdrive/c/werl/otp\_src\_18.3/erts/emulator'
make[2]: *** [/cygdrive/c/werl/otp\_src\_18.3/make/run\_make.mk:35: opt] Error 2
make[2]: Leaving directory '/cygdrive/c/werl/otp\_src\_18.3/erts/emulator'
make[1]: *** [Makefile:61: smp] Error 2
make[1]: Leaving directory '/cygdrive/c/werl/otp\_src\_18.3/erts'
make: *** [Makefile:444: emulator] Error 2

Bedste reference


Følg du vejledningen i den officielle installationsvejledning? [4]


Jeg formoder, at du har alle debet allerede installeret (jeg er mere bekendt med MinGW/MSYS, men det skal bare fungere fint med Cygwin).


Bemærk at du skal køre følgende kommando:


./otp\_build env\_win32 # x64 <- add this for 64bit build

Andre referencer 1


Det lader til, at jeg manglede nogle Cygwin afhængigheder. Jeg kontrollerede alt fra Devel og fjernede noget, der ikke var relateret til C-compilering.