in reply to Attempt to embed Perl in C on Windows
Strangely, your code built with MSVC and perl5.10 builds clean and runs perfectly:
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 Hello from MSWin32 5.010001 C:\test>type hello.pl #! perl -slw use strict; print "Hello from $^O $]\n"; C:\test>
Built with gcc and 5.18 it builds clean(ish) and runs without crashing, but simply does nothing:
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.18\ +c\lib" C:\Perl5.18\perl\lib\CORE\libperl518.a C:\Perl5.18\c\x86_64-w +64-mingw32\lib\libmoldname.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\lib +kernel32.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libuser32.a C:\Perl5. +18\c\x86_64-w64-mingw32\lib\libgdi32.a C:\Perl5.18\c\x86_64-w64-mingw +32\lib\libwinspool.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libcomdlg32 +.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libadvapi32.a C:\Perl5.18\c\x +86_64-w64-mingw32\lib\libshell32.a C:\Perl5.18\c\x86_64-w64-mingw32\l +ib\libole32.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\liboleaut32.a C:\P +erl5.18\c\x86_64-w64-mingw32\lib\libnetapi32.a C:\Perl5.18\c\x86_64-w +64-mingw32\lib\libuuid.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libws2_ +32.a C:\Perl5.18\c\x86_64-w64-min 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>type hello.pl18 #! perl -slw use strict; print "Hello from $^O $]\n"; C:\test>gcc_bld_hello.c.pl18
And oddly, if I add a printf() at the top of the code:
#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); } 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; }
It still outputs nothing at all:
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.18\ +c\lib" C:\Perl5.18\perl\lib\CORE\libperl518.a C:\Perl5.18\c\x86_64-w +64-mingw32\lib\libmoldname.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\lib +kernel32.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libuser32.a C:\Perl5. +18\c\x86_64-w64-mingw32\lib\libgdi32.a C:\Perl5.18\c\x86_64-w64-mingw +32\lib\libwinspool.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libcomdlg32 +.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libadvapi32.a C:\Perl5.18\c\x +86_64-w64-mingw32\lib\libshell32.a C:\Perl5.18\c\x86_64-w64-mingw32\l +ib\libole32.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\liboleaut32.a C:\P +erl5.18\c\x86_64-w64-mingw32\lib\libnetapi32.a C:\Perl5.18\c\x86_64-w +64-mingw32\lib\libuuid.a C:\Perl5.18\c\x86_64-w64-mingw32\lib\libws2_ +32.a C:\Perl5.18\c\x86_64-w64-min 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>
I can't even begin to work out why that is. (I've yet to earn my Master's in -reading_stupidly_long_options -and_working_out_what_the_fcuk_they_are_meant_to_do. :)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Attempt to embed Perl in C on Windows
by bulk88 (Priest) on Dec 22, 2014 at 02:01 UTC | |
by BrowserUk (Patriarch) on Dec 22, 2014 at 02:30 UTC | |
by Anonymous Monk on Dec 23, 2014 at 16:45 UTC | |
by Anonymous Monk on Dec 23, 2014 at 17:07 UTC | |
by BrowserUk (Patriarch) on Dec 23, 2014 at 18:20 UTC | |
by Anonymous Monk on Dec 24, 2014 at 17:02 UTC | |
| |
by Anonymous Monk on Dec 23, 2014 at 17:13 UTC | |
by BrowserUk (Patriarch) on Dec 23, 2014 at 18:25 UTC | |
|