Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re: problem installing DBD::Pg

by syphilis (Archbishop)
on Jan 21, 2020 at 00:22 UTC ( [id://11111656]=note: print w/replies, xml ) Need Help??


in reply to problem installing DBD::Pg

I have been google searching but I have not yet found anything helpful

Try googling for "function declared but not defined" (including the quotes).
Seems that a solution might be as simple as removing "static" from line 3242 of Pg.c ... or maybe replacing that occurrence of "static" with "extern".
See https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2129?view=vs-2019 for the fundamental explanation; also https://stackoverflow.com/questions/19609239/function-declared-but-not-defined-yet-it-is-defined for some discussion - though the latter link is actually C++.

Cheers,
Rob

Replies are listed 'Best First'.
Re^2: problem installing DBD::Pg
by expo1967 (Sexton) on Jan 22, 2020 at 14:40 UTC
    i checked Pg.c and it only had 3241 lines. Are you sure about the line number 3242 ?

      There is no Pg.c in the distribution, only Pg.xs, which will be translated to Pg.c by the ExtUtils/xsubpp tool in your perl distribution.

      Depending on a lot of aspects, line numbers in Pg.c have no meaning to people working on different versions of perl, DBI or OS.

      If you build from source, you can find the line numbers after make/nmake/dmake/gmake:

      $ grep ^#line Pg.c | tail -4 #line 907 "Pg.xs" #line 2834 "Pg.c" #line 39 "./Pg.xsi" #line 3359 "Pg.c"

      Only the line numbers in Pg.xs will be useful to others (using the same version of DBD::Pg).


      Enjoy, Have FUN! H.Merijn
      Are you sure about the line number 3242 ?

      Sorry - it hadn't occurred to me that Pg.c was (as Tux has just pointed out) a generated file.

      The problem arises because of the declaration of static int errno; in Pg.h. (This declaration is made only on Windows.)
      I would first try removing that declaration (line 14) from Pg.h and then rebuild DBD::Pg afresh.
      Here's a simple demo of the problem:

      UPDATE: In this demo script, I originally declared foo() as SV * foo().
      I have now corrected that declaration to void foo().
      use strict; use warnings; use Inline C => <<'END_OF_C'; static int errno; void foo() { printf("errno: %d\n", errno); } END_OF_C foo();
      On Windows, running that perl script with my Platform SDK compiler (14.00.40310.41), I get:
      Microsoft (R) Program Maintenance Utility Version 7.00.8882 Copyright (C) Microsoft Corp 1988-2000. All rights reserved. --snip-- cl -c -I"C:/_32/pscrpt/inline" -nologo -GF -W3 -MD -Zi -DNDEBUG +-Ox -GL -fp:precise -DWIN32 -D_CONSOLE -DNO_STRICT -DWIN64 -DCONSERVA +TIVE -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONT +EXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -MD -Zi -DNDEBUG -Ox -GL -fp:pre +cise -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\" "-IC:\_64\ap1600\l +ib\CORE" try_pl_3645.c try_pl_3645.c try_pl_3645.c(210) : error C2129: static function 'int *_errno(void)' +declared but not defined C:\_64\Platform_SDK\Include\crt\errno.h(54) : see declaration +of '_errno' NMAKE : fatal error U1077: 'cl' : return code '0x2' Stop. A problem was encountered while attempting to compile and install your + Inline C code. The command that failed was: C:\_64\PLATFO~1\Bin\nmake.exe > out.make 2>&1 The build directory was: C:\_32\pscrpt\inline\_Inline\build\try_pl_3645 To debug the problem, cd to the build directory, and inspect the outpu +t files. at try.pl line 12. ...propagated at C:/_64/ap1600/site/lib/Inline/C.pm line 772. BEGIN failed--compilation aborted at try.pl line 12.
      I get the same problem with mingw (gcc) compilers - with slightly different error messages.

      There's only the one instance of "errno" in the entire DBD::Pg source, so I'm guessing there's no harm in removing that one and only instance at line 14 of Pg.h.
      Or am I missing something ?

      Cheers,
      Rob

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11111656]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (1)
As of 2024-04-18 23:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found