On 24 April 2018 at 15:49, Dave Mitchell <davem@iabyn.com> wrote: > On Tue, Apr 24, 2018 at 02:56:00PM +0200, Leon Timmermans wrote: > >> I would guess that making them EXTCONST again, but putting them inside >> a START_EXTERN_C/END_EXTERN_C block would fix this. > > That seems to work under linux. > This branch I've just pushed, smoke-me/davem/nan_cpp, > builds ok with gcc, g++ and clang on Linux. > > Does someone want to try it on Windows? > That fixes the problem for me. But I spoke to soon in claiming that the build otherwise worked with VS2017. There is still one more problem: Socket.xs(804): error C2132: syntax error: unexpected identifier Socket.xs(808): error C2132: syntax error: unexpected identifier I don't understand this one either. Line 804 is: if (sockaddr_len < STRUCT_OFFSET(struct sockaddr, sa_data)) which pre-processes to: if (sockaddr_len < __builtin_offsetof(struct sockaddr,sa_data)) Similar pre-processing happens in many other files and they compile without trouble, e.g. in B.xs we have: { STR_WITH_LEN("next"), OPp, STRUCT_OFFSET(struct op, op_next), }, which becomes: { ("" "next" ""), (sizeof("next")-1), 0x3, __builtin_offsetof(struct op,op_next), }, and causes no problem. I can't see why Socket is any different. However, It does contain this: /* STRUCT_OFFSET should have come from from perl.h, but if not, * roll our own (not using offsetof() since that is C99). */ #ifndef STRUCT_OFFSET # define STRUCT_OFFSET(s,m) (Size_t)(&(((s *)0)->m)) #endif and if I insert "#undef STRUCT_OFFSET" before that (to get rid of the definition from perl.h and use the above instead) then it fixes it. That can't be the right solution, though. *That* really is the last problem. With that hack in place the build now succeeds.Thread Previous | Thread Next