in reply to Re^2: Attempt to embed Perl in C on Windows
in thread Attempt to embed Perl in C on Windows
Perl usually hooks libc stuff like printf and malloc on win32 to make very old thread-unsafe XS code, thread-safe (the effort usually fails). Do a #undef printf to get back the real printf and not a hook into perl.
Wouldn't that affect the msvc build as well as the gcc build?
Anyhow, I tried it:
#include <EXTERN.h> #include <perl.h> EXTERN_C void xs_init (pTHX); EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); EXTERN_C void boot_Win32CORE (pTHX_ CV* cv); EXTERN_C void xs_init(pTHX) { char *file = __FILE__; dXSUB_SYS; /* DynaLoader is a special case */ newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); newXS("Win32CORE::bootstrap", boot_Win32CORE, file); } #undef printf static PerlInterpreter *my_perl; /*** The Perl interpreter ***/ int main(int argc, char **argv, char **env) { printf( "So far, so good!\n" ); PERL_SYS_INIT3(&argc,&argv,&env); my_perl = perl_alloc(); perl_construct(my_perl); PL_exit_flags |= PERL_EXIT_DESTRUCT_END; perl_parse(my_perl, NULL, argc, argv, (char **)NULL); perl_run(my_perl); perl_destruct(my_perl); perl_free(my_perl); PERL_SYS_TERM(); return 0; }
And still the gcc build produces no output:
C:\test>gcc_bld_hello.c.pl18 Building Hello gcc -Wall -mwindows -o hello hello.c -s -O2 -DWIN32 -DWIN64 -DCONSER +VATIVE -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLIC +IT_SYS -DUSE_PERLIO -fno-strict-aliasing -mms-bitfields -I"C:\Perl5. +18\perl\lib\CORE" -s -L"C:\Perl5.18\perl\lib\CORE" -L"C:\Perl5 gw32\lib\libmpr.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libwinmm.a C:\P +erl5.18\c\x86_64-w64-mingw32\lib\libversion.a C:\Perl5.18\c\x86_64-w6 +4-mingw32\lib\libodbc32.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libodb +ccp32.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libcomctl32.a In file included from C:\Perl5.18\perl\lib\CORE/sys/socket.h:180:0, from C:\Perl5.18\perl\lib\CORE/win32.h:386, from C:\Perl5.18\perl\lib\CORE/win32thread.h:4, from C:\Perl5.18\perl\lib\CORE/perl.h:2869, from hello.c:2: C:\Perl5.18\perl\lib\CORE/win32.h:391:26: warning: "/*" within comment + [-Wcomment] C:\Perl5.18\perl\lib\CORE/win32.h:392:33: warning: "/*" within comment + [-Wcomment] In file included from C:\Perl5.18\perl\lib\CORE/win32thread.h:4:0, from C:\Perl5.18\perl\lib\CORE/perl.h:2869, from hello.c:2: C:\Perl5.18\perl\lib\CORE/win32.h:391:26: warning: "/*" within comment + [-Wcomment] C:\Perl5.18\perl\lib\CORE/win32.h:392:33: warning: "/*" within comment + [-Wcomment] C:\test>.\hello.exe hello.pl18 C:\test>.\hello.exe hello.pl18 C:\test>
Whereas the cl build does what is expected:
C:\test>cl /W3 hello.c -DWIN32 -I"C:\Perl64\lib\CORE" C:\Perl64\lib\C +ORE\perl510.lib Microsoft (R) C/C++ Optimizing Compiler Version 15.00.21022.08 for x64 Copyright (C) Microsoft Corporation. All rights reserved. hello.c Microsoft (R) Incremental Linker Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved. /out:hello.exe hello.obj C:\Perl64\lib\CORE\perl510.lib C:\test>.\hello.exe hello.pl So far, so good! Hello from MSWin32 5.010001
|
|---|