mschilli / net-google-drive-simple

Net::Google::Drive::Simple CPAN Module
Other
11 stars 22 forks source link

XS.c: loadable library and perl binaries are mismatched #45

Closed rwp0 closed 2 years ago

rwp0 commented 3 years ago

Hi, thank you, this is a useful module, but:

Running google-drive-init (as obtained from eg directory, to generate .google-drive.yml file) on OpenBSD-current (6.9) with perl 5.32.1 (amd64-openbsd) results in:

XS.c: loadable library and perl binaries are mismatched (got handshake key 0xb600000, needed 0xec00000)

What does this mean, is it the version of Perl that is unsupported?

Does this error come from a dependency of the module, if so which one?

atoomic commented 3 years ago

It means that the XS libraries were compiled with a different version of Perl and you try to use it with a different version. You have to reinstall all XS codes when using a different Perl version.

What is the path of the library and your Perl path? Have you updated your Perl version recently? Are you using local::lib? a manual install? rsync or scp the files from a different server?

You should have the same problem with all XS codes install the same way

rwp0 commented 3 years ago

What is the path of the library and your Perl path?

  1. /usr/local/libdata/perl5/site_perl/Net/Google/Drive/Simple.pm
  2. /usr/bin/perl (executable/binary/interpreter, I assume)

Have you updated your Perl version recently?

In OpenBSD Perl is in base, so yes, as part of sysupgrade (6.8 -> 6.9) it got upgraded (5.30.3 -> 5.32.1). But I also upgraded all the packages along with the system.

Are you using local::lib? a manual install? rsync or scp the files from a different server?

No, I've installed the module from CPAN using cpan(1). cpan(1) failed to install one dependency (Crypt::SSLeay), so I installed it from OpenBSD ports as p5-Crypt-SSLeay, I suspect this dependency might cause the issue.

Here is the output of: perl -V:

Summary of my perl5 (revision 5 version 32 subversion 1) configuration:

  Platform:
    osname=openbsd
    osvers=6.9
    archname=amd64-openbsd
    uname='openbsd'
    config_args='-dse -Dopenbsd_distribution=defined -Dmksymlinks'
    hint=recommended
    useposix=true
    d_sigaction=define
    useithreads=undef
    usemultiplicity=undef
    use64bitint=define
    use64bitall=define
    uselongdouble=undef
    usemymalloc=n
    default_inc_excludes_dot=define
    bincompat5005=undef
  Compiler:
    cc='cc'
    ccflags ='-DNO_LOCALE_NUMERIC -DNO_LOCALE_COLLATE -fno-strict-aliasing -fno-delete-null-pointer-checks -pipe -fstack-protector-strong -I/usr/local/include'
    optimize='-O2'
    cppflags='-DBIG_TIME -DNO_LOCALE_NUMERIC -DNO_LOCALE_COLLATE -fno-strict-aliasing -fno-delete-null-pointer-checks -pipe -fstack-protector-strong -I/usr/local/include'
    ccversion=''
    gccversion='OpenBSD Clang 11.1.0'
    gccosandvers=''
    intsize=4
    longsize=8
    ptrsize=8
    doublesize=8
    byteorder=12345678
    doublekind=3
    d_longlong=define
    longlongsize=8
    d_longdbl=define
    longdblsize=16
    longdblkind=3
    ivtype='long'
    ivsize=8
    nvtype='double'
    nvsize=8
    Off_t='off_t'
    lseeksize=8
    alignbytes=8
    prototype=define
  Linker and Libraries:
    ld='cc'
    ldflags ='-Wl,-E  -fstack-protector-strong -L/usr/local/lib'
    libpth=/usr/lib /usr/lib
    libs=-lm -lc
    perllibs=-lm -lc
    libc=/usr/lib/libc.so.96.0
    so=so
    useshrplib=true
    libperl=libperl.so.22.0
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs
    dlext=so
    d_dlsymun=undef
    ccdlflags='-Wl,-R/usr/libdata/perl5/amd64-openbsd/CORE'
    cccdlflags='-DPIC -fpic '
    lddlflags='-shared -fpic  -fstack-protector-strong -L/usr/local/lib'

Characteristics of this binary (from libperl): 
  Compile-time options:
    HAS_TIMES
    PERLIO_LAYERS
    PERL_COPY_ON_WRITE
    PERL_DONT_CREATE_GVSV
    PERL_MALLOC_WRAP
    PERL_OP_PARENT
    PERL_PRESERVE_IVUV
    USE_64_BIT_ALL
    USE_64_BIT_INT
    USE_LARGE_FILES
    USE_LOCALE
    USE_LOCALE_CTYPE
    USE_LOCALE_TIME
    USE_PERLIO
    USE_PERL_ATOF
  Built under openbsd
  %ENV:
    PERLLIB="/home/regular/lib/perl"
  @INC:
    /home/regular/lib/perl
    /usr/local/libdata/perl5/site_perl/amd64-openbsd
    /usr/local/libdata/perl5/site_perl
    /usr/libdata/perl5/amd64-openbsd
    /usr/libdata/perl5

Thank you for your response.

rwp0 commented 3 years ago

Also, is there any other way to generate the .google-drive.yml file (manually) without starting a web server.

I suspect this line will also fail under non-Linux since there's no native daemon command:

$app->start( 'daemon', '-l', $oauth->local_uri );

atoomic commented 3 years ago

The upgrade from 5.30 to 5.32 explains that issue. You probably upgraded all system packages, but if this one was installed manually, it needs to be reinstalled. Installing the package from another source if it s not compiled with the same Perl binary is a bad idea.

You should consider fixing your Crypt::SSLeay issue. I suspect this will raise some extra errors even you could get a proper yaml file.

Note that the .google-drive.yml can be generated from any other server/workstation... It contains the oauth token from google. eg/google-drive-init is provided as an helper to generate and capture it.

atoomic commented 2 years ago

I think we can now close this issue, let me know if this needs more investigation