Hi,
This is a win32-perl issue, but not specifically an *ActivePerl* issue.
For the demo, consider this Inline::C script:
###############################
use strict;
use Inline C => Config =>
LIBS => '-lkernel32',
BUILD_NOISY => 1;
use Inline C => <<'END_C';
#include <windows.h>
void foo( char *name ) {
int job;
job = CreateJobObjectA( NULL, name );
}
END_C
foo( 'fred' );
###############################
With perl-5.14.0 and the mingw port of gcc-4.5.2 there's no problem. (See
attached 'ok.txt'.)
With perl-5.12.0 and the *same* compiler, CreateJobObjectA doesn't get
found, even though it's defined in libkernel32.a (to which we are linking).
(See attached 'out.txt'.)
It's not a mingw-specific problem because I have a perl 5.10.0 that I built
using MSVC++ 7.0, and the same problem occurs there (see outVC7.txt).
With Microsoft Compilers only (even on a perl/compiler combo that works), we
additionally get the warning:
warning C4013: 'CreateJobObjectA' undefined; assuming extern returning int
Why does that happen ?
Generally, there's no problem with Inline::C and Windows API functions - but
the "Job" related functions (such as CreateObjectA, SetInformationJobObject
and AssignProcessToJobObject) just don't get found with some perl/compiler
combos.
(Btw, I haven't been able to re-create the failure on any of my x64 builds.)
Any ideas as to what might be screwing things up ? (I've spent hours
comparing outputs of working and non-working builds of the script, and
haven't been able to spot the crucial difference.)
Cheers,
Rob
validate Stage
Starting Build Preprocess Stage
get_maps Stage
Finished Build Preprocess Stage
Starting Build Parse Stage
Finished Build Parse Stage
Starting Build Glue 1 Stage
Finished Build Glue 1 Stage
Starting Build Glue 2 Stage
Finished Build Glue 2 Stage
Starting Build Glue 3 Stage
Finished Build Glue 3 Stage
Starting Build Compile Stage
Starting "perl Makefile.PL" Stage
Writing Makefile for job_pl_4a1d4
Finished "perl Makefile.PL" Stage
Starting "make" Stage
C:\MinGW\perl512\bin\perl.exe C:\MinGW\perl512\site\lib\ExtUtils\xsubpp -typemap
"C:\MinGW\perl512\lib\ExtUtils\typemap" -typemap "C:\_32\pscrpt\inline\typemap" job_pl_4a1d4.xs
> job_pl_4a1d4.xsc && C:\MinGW\perl512\bin\perl.exe -MExtUtils::Command -e "mv" -- job_pl_4a1d4.xsc
job_pl_4a1d4.c
gcc -c -I"C:/_32/pscrpt/inline" -s -O2 -DWIN32 -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT
-DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-bitfields -DPERL_MSVCRT_READFIX -s -O2 -DVERSION=\"0.00\"
-DXS_VERSION=\"0.00\" "-IC:\MinGW\perl512\lib\CORE" job_pl_4a1d4.c
Running Mkbootstrap for job_pl_4a1d4 ()
C:\MinGW\perl512\bin\perl.exe -MExtUtils::Command -e "chmod" -- 644
job_pl_4a1d4.bs
C:\MinGW\perl512\bin\perl.exe -MExtUtils::Mksymlists \
-e "Mksymlists('NAME'=>\"job_pl_4a1d4\", 'DLBASE' => 'job_pl_4a1d4', 'DL_FUNCS' => { },
'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' => []);"
dlltool --def job_pl_4a1d4.def --output-exp dll.exp
g++ -o blib\arch\auto\job_pl_4a1d4\job_pl_4a1d4.dll -Wl,--base-file -Wl,dll.base -mdll -s
-L"c:\MinGW\perl512\lib\CORE" -L"C:\MinGW\lib" job_pl_4a1d4.o
-Wl,--image-base,0x1a030000 C:\MinGW\perl512\lib\CORE\libperl511.a C:\MinGW\lib\libkernel32.a
C:\MinGW\lib\libmoldname.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a
C:\MinGW\lib\libgdi32.a C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a
C:\MinGW\lib\libadvapi32.a C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a
C:\MinGW\lib\liboleaut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a
C:\MinGW\lib\libws2_32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a
C:\MinGW\lib\libodbc32.a C:\MinGW\lib\libodbccp32.a C:\MinGW\lib\libcomctl32.a dll.exp
job_pl_4a1d4.o:job_pl_4a1d4.c:(.text+0x15): undefined reference to
`CreateJobObjectA'
collect2: ld returned 1 exit status
dmake: Error code 129, while making
'blib\arch\auto\job_pl_4a1d4\job_pl_4a1d4.dll'
A problem was encountered while attempting to compile and install your Inline
C code. The command that failed was:
dmake
The build directory was:
C:\_32\pscrpt\inline\_Inline\build\job_pl_4a1d4
To debug the problem, cd to the build directory, and inspect the output files.
at job.pl line 5
BEGIN failed--compilation aborted at job.pl line 14.
validate Stage
Starting Build Preprocess Stage
get_maps Stage
Finished Build Preprocess Stage
Starting Build Parse Stage
Finished Build Parse Stage
Starting Build Glue 1 Stage
Finished Build Glue 1 Stage
Starting Build Glue 2 Stage
Finished Build Glue 2 Stage
Starting Build Glue 3 Stage
Finished Build Glue 3 Stage
Starting Build Compile Stage
Starting "perl Makefile.PL" Stage
Writing Makefile for job_pl_4a1d
Finished "perl Makefile.PL" Stage
Starting "make" Stage
Microsoft (R) Program Maintenance Utility Version 7.00.9466
Copyright (C) Microsoft Corporation. All rights reserved.
C:\_32\perl_vc7\5.10.0\bin\perl.exe C:\_32\perl_vc7\5.10.0\lib\ExtUtils\xsubpp -typemap
"C:\_32\perl_vc7\5.10.0\lib\ExtUtils\typemap" -typemap "C:\_32\pscrpt\inline\typemap"
job_pl_4a1d.xs > job_pl_4a1d.xsc && C:\_32\perl_vc7\5.10.0\bin\perl.exe -MExtUtils::Command -e mv
job_pl_4a1d.xsc job_pl_4a1d.c
cl -c -I"C:/_32/pscrpt/inline" -nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT
-DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -MD -Zi -DNDEBUG -O1
-DVERSION=\"0.00\" -DXS_VERSION=\"0.00\" "-IC:\_32\perl_vc7\5.10.0\lib\CORE"
job_pl_4a1d.c
job_pl_4a1d.c
job_pl_4a1d.xs(10) : warning C4013: 'CreateJobObjectA' undefined; assuming
extern returning int
Running Mkbootstrap for job_pl_4a1d ()
C:\_32\perl_vc7\5.10.0\bin\perl.exe -MExtUtils::Command -e chmod 644
job_pl_4a1d.bs
C:\_32\perl_vc7\5.10.0\bin\perl.exe -MExtUtils::Mksymlists -e
"Mksymlists('NAME'=>\"job_pl_4a1d\", 'DLBASE' => 'job_pl_4a1d', 'DL_FUNCS' => { },
'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' => []);"
link -out:blib\arch\auto\job_pl_4a1d\job_pl_4a1d.dll -dll -nologo -nodefaultlib
-debug -opt:ref,icf -libpath:"c:\_32\perl_vc7\5.10.0\lib\CORE" -machine:x86
job_pl_4a1d.obj C:\_32\perl_vc7\5.10.0\lib\CORE\perl510.lib
C:\vsnet\VC7\lib\kernel32.lib C:\vsnet\VC7\lib\oldnames.lib C:\vsnet\VC7\lib\kernel32.lib
C:\vsnet\VC7\PlatformSDK\lib\user32.lib C:\vsnet\VC7\PlatformSDK\lib\gdi32.lib
C:\vsnet\VC7\PlatformSDK\lib\winspool.lib C:\vsnet\VC7\PlatformSDK\lib\comdlg32.lib
C:\vsnet\VC7\PlatformSDK\lib\advapi32.lib C:\vsnet\VC7\PlatformSDK\lib\shell32.lib
C:\vsnet\VC7\PlatformSDK\lib\ole32.lib C:\vsnet\VC7\PlatformSDK\lib\oleaut32.lib
C:\vsnet\VC7\PlatformSDK\lib\netapi32.lib C:\vsnet\VC7\PlatformSDK\lib\uuid.lib
C:\vsnet\VC7\PlatformSDK\lib\ws2_32.lib C:\vsnet\VC7\PlatformSDK\lib\mpr.lib
C:\vsnet\VC7\PlatformSDK\lib\winmm.lib C:\vsnet\VC7\PlatformSDK\lib\version.lib
C:\vsnet\VC7\PlatformSDK\lib\odbc32.lib C:\vsnet\VC7\PlatformSDK\lib\odbccp32.lib
C:\vsnet\VC7\lib\msvcrt.lib -def:job_pl_4a1d.def
Creating library blib\arch\auto\job_pl_4a1d\job_pl_4a1d.lib and object
blib\arch\auto\job_pl_4a1d\job_pl_4a1d.exp
job_pl_4a1d.obj : error LNK2019: unresolved external symbol _CreateJobObjectA
referenced in function _foo
blib\arch\auto\job_pl_4a1d\job_pl_4a1d.dll : fatal error LNK1120: 1 unresolved
externals
NMAKE : fatal error U1077: 'link' : return code '0x460'
Stop.
A problem was encountered while attempting to compile and install your Inline
C code. The command that failed was:
nmake
The build directory was:
C:\_32\pscrpt\inline\_Inline\build\job_pl_4a1d
To debug the problem, cd to the build directory, and inspect the output files.
at job.pl line 5
BEGIN failed--compilation aborted at job.pl line 14.
validate Stage
Starting Build Preprocess Stage
get_maps Stage
Finished Build Preprocess Stage
Starting Build Parse Stage
Finished Build Parse Stage
Starting Build Glue 1 Stage
Finished Build Glue 1 Stage
Starting Build Glue 2 Stage
Finished Build Glue 2 Stage
Starting Build Glue 3 Stage
Finished Build Glue 3 Stage
Starting Build Compile Stage
Starting "perl Makefile.PL" Stage
Writing Makefile for job_pl_4a1d4
Writing MYMETA.yml
Finished "perl Makefile.PL" Stage
Starting "make" Stage
C:\MinGW\perl\bin\perl.exe C:\MinGW\perl\site\lib\ExtUtils\xsubpp -typemap
"C:\MinGW\perl\lib\ExtUtils\typemap" -typemap "C:\_32\pscrpt\inline\typemap" job_pl_4a1d4.xs >
job_pl_4a1d4.xsc && C:\MinGW\perl\bin\perl.exe -MExtUtils::Command -e "mv" -- job_pl_4a1d4.xsc
job_pl_4a1d4.c
gcc -c -I"C:/_32/pscrpt/inline" -s -O2 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT
-DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-bitfields -s -O2 -DVERSION=\"0.00\"
-DXS_VERSION=\"0.00\" "-IC:\MinGW\perl\lib\CORE" job_pl_4a1d4.c
job_pl_4a1d4.xs: In function 'foo':
job_pl_4a1d4.xs:10:9: warning: assignment makes integer from pointer without a
cast
Running Mkbootstrap for job_pl_4a1d4 ()
C:\MinGW\perl\bin\perl.exe -MExtUtils::Command -e "chmod" -- 644 job_pl_4a1d4.bs
C:\MinGW\perl\bin\perl.exe -MExtUtils::Mksymlists \
-e "Mksymlists('NAME'=>\"job_pl_4a1d4\", 'DLBASE' => 'job_pl_4a1d4', 'DL_FUNCS' => { },
'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' => []);"
dlltool --def job_pl_4a1d4.def --output-exp dll.exp
g++ -o blib\arch\auto\job_pl_4a1d4\job_pl_4a1d4.dll -Wl,--base-file -Wl,dll.base -mdll -s
-L"c:\MinGW\perl\lib\CORE" -L"C:\MinGW\lib" job_pl_4a1d4.o
C:\MinGW\perl\lib\CORE\libperl514.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libmoldname.a
C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a
C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a
C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\liboleaut32.a
C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libws2_32.a C:\MinGW\lib\libmpr.a
C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:\MinGW\lib\libodbc32.a
C:\MinGW\lib\libodbccp32.a C:\MinGW\lib\libcomctl32.a dll.exp
dlltool --def job_pl_4a1d4.def --base-file dll.base --output-exp dll.exp
g++ -o blib\arch\auto\job_pl_4a1d4\job_pl_4a1d4.dll -mdll -s -L"c:\MinGW\perl\lib\CORE" -L"C:\MinGW\lib" job_pl_4a1d4.o C:\MinGW\perl\lib\CORE\libperl514.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libmoldname.a C:\MinGW\lib\libkernel32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a C:\MinGW\lib\libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a C:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\liboleaut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib\libws2_32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libversion.a C:\MinGW\lib\libodbc32.a C:\MinGW\lib\libodbccp32.a C:\MinGW\lib\libcomctl32.a dll.exp
C:\MinGW\perl\bin\perl.exe -MExtUtils::Command -e "chmod" -- 755 blib\arch\auto\job_pl_4a1d4\job_pl_4a1d4.dll
C:\MinGW\perl\bin\perl.exe -MExtUtils::Command -e "cp" -- job_pl_4a1d4.bs
blib\arch\auto\job_pl_4a1d4\job_pl_4a1d4.bs
C:\MinGW\perl\bin\perl.exe -MExtUtils::Command -e "chmod" -- 644
blib\arch\auto\job_pl_4a1d4\job_pl_4a1d4.bs
Finished "make" Stage
Starting "make install" Stage
Files found in blib\arch: installing files in blib\lib into architecture
dependent library tree
Installing C:\_32\pscrpt\inline\_Inline\lib\auto\job_pl_4a1d4\job_pl_4a1d4.bs
Installing C:\_32\pscrpt\inline\_Inline\lib\auto\job_pl_4a1d4\job_pl_4a1d4.dll
Finished "make install" Stage
Starting Cleaning Up Stage
Finished Cleaning Up Stage
Finished Build Compile Stage
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs