HDF5 Cross: /bin/sh: ./H5make_libsettings: /lib/ld64-uClibc.so.0: bad ELF interpreter: No such file or directory

Hi,

I would still like to cross compile hdf5 against x86_84 w/uClibc

I have managed to get passed the configuration stage but now. I get the following:

···

===============================================================
LD_LIBRARY_PATH="$LD_LIBRARY_PATH`echo | \
        sed -e 's/-L/:/g' -e 's/ //g'`" \
./H5make_libsettings > H5lib_settings.c || \
    (test $HDF5_Make_Ignore && echo "*** Error ignored") || \
    (rm -f H5lib_settings.c ; exit 1)
/bin/sh: ./H5make_libsettings: /lib/ld64-uClibc.so.0: bad ELF interpreter: No such file or directory
make[3]: *** [H5lib_settings.c] Error 1
Makefile:1682: recipe for target 'H5lib_settings.c' failed

This is because you trying to execute a binary built for my target on my build host. :frowning:
I found the following in your Makefile:
===== src/Makefile snippet ============================================
In one case you are running an executable to generate a "C" file :frowning:
# Build configuration header file generation
# The LD_LIBRARY_PATH setting is a kludge.
# Things should have been all set during H5make_libsettings making.
# Remove the generated .c file if errors occur unless HDF5_Make_Ignore
# is set to ignore the error.
H5lib_settings.c: H5make_libsettings$(EXEEXT) libhdf5.settings
        LD_LIBRARY_PATH="$$LD_LIBRARY_PATH`echo $(LDFLAGS) | \
                sed -e 's/-L/:/g' -e 's/ //g'`" \
        $(RUNSERIAL) ./H5make_libsettings$(EXEEXT) > $@ || \
            (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
            ($(RM) $@ ; exit 1)

=================================================================

Can you generate C files with a portable scripting language such as PERL ?

Can I proceed without this?
I will be building for embedded linux.
I can setup LD_LIBRARY_PATH manually.

Or in some cases, I will do a static build with my application.

Looks like I will have a similar problem with: H5detect.c which claims to generate "native.c"
But instead I see "

# Number format detection
# The LD_LIBRARY_PATH setting is a kludge.
# Things should have been all set during H5detect making.
# Remove the generated .c file if errors occur unless HDF5_Make_Ignore
# is set to ignore the error.
H5Tinit.c: H5detect$(EXEEXT)
        LD_LIBRARY_PATH="$$LD_LIBRARY_PATH`echo $(LDFLAGS) | \
                sed -e 's/-L/:/g' -e 's/ //g'`" \
        $(RUNSERIAL) ./H5detect$(EXEEXT) > $@ || \
            (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
            ($(RM) $@ ; exit 1)

------------------------------------------------------------------------
May, I use "HDF5_Make_Ignore" to get around this for now?

What are the side effects?

Cheers,
Ernest

Hi,

I tried to remove "H5lib_settings.c" and "H5Tinit.c" :frowning:

But that results in the following build error:

···

==============================================================
../src/.libs/libhdf5.so: undefined reference to `H5TN_init_interface'
../src/.libs/libhdf5.so: undefined reference to `H5libhdf5_settings'
collect2: error: ld returned 1 exit status
Makefile:1529: recipe for target 'testhdf5' failed
make[2]: *** [testhdf5] Error 1
make[2]: *** Waiting for unfinished jobs....
../src/.libs/libhdf5.so: undefined reference to `H5TN_init_interface'
../src/.libs/libhdf5.so: undefined reference to `H5libhdf5_settings'
collect2: error: ld returned 1 exit status
Makefile:1465: recipe for target 'lheap' failed

Oops, looks like other code is using it :frowning:
As shown below:

[ernesto@localhost src]$ grep H5libhdf5_settings *
H5.c: HDfprintf (stderr, "%s", H5libhdf5_settings);
H5.c: HDfprintf (stderr, "%s", H5libhdf5_settings);
H5make_libsettings.c: fprintf(flibinfo, "char H5libhdf5_settings[]=\n");
H5make_libsettings.c: fprintf(flibinfo, "char H5libhdf5_settings[]=\"\";\n");
H5private.h:extern char H5libhdf5_settings[]; /* embedded library information */
[ernesto@localhost src]$ grep H5TN_init_interface *
H5detect.c: * Function: H5TN_init_interface\n\
H5detect.c:H5TN_init_interface(void)\n\
H5detect.c: FUNC_LEAVE_NOAPI(ret_value);\n} /* end H5TN_init_interface() */\n");
H5T.c: if(H5TN_init_interface() < 0)
H5Tprivate.h:H5_DLL herr_t H5TN_init_interface(void);

Thanks in advance for your support.

Cheers,
Ernesto
________________________________________
From: Williams Jr., Ernest L.
Sent: Friday, January 2, 2015 9:04 PM
To: help@hdfgroup.org
Cc: Williams Jr., Ernest L.; hdf-forum@lists.hdfgroup.org
Subject: HDF5 Cross: /bin/sh: ./H5make_libsettings: /lib/ld64-uClibc.so.0: bad ELF interpreter: No such file or directory

Hi,

I would still like to cross compile hdf5 against x86_84 w/uClibc

I have managed to get passed the configuration stage but now. I get the following:

LD_LIBRARY_PATH="$LD_LIBRARY_PATH`echo | \
        sed -e 's/-L/:/g' -e 's/ //g'`" \
./H5make_libsettings > H5lib_settings.c || \
    (test $HDF5_Make_Ignore && echo "*** Error ignored") || \
    (rm -f H5lib_settings.c ; exit 1)
/bin/sh: ./H5make_libsettings: /lib/ld64-uClibc.so.0: bad ELF interpreter: No such file or directory
make[3]: *** [H5lib_settings.c] Error 1
Makefile:1682: recipe for target 'H5lib_settings.c' failed

This is because you trying to execute a binary built for my target on my build host. :frowning:
I found the following in your Makefile:
===== src/Makefile snippet ============================================
In one case you are running an executable to generate a "C" file :frowning:
# Build configuration header file generation
# The LD_LIBRARY_PATH setting is a kludge.
# Things should have been all set during H5make_libsettings making.
# Remove the generated .c file if errors occur unless HDF5_Make_Ignore
# is set to ignore the error.
H5lib_settings.c: H5make_libsettings$(EXEEXT) libhdf5.settings
        LD_LIBRARY_PATH="$$LD_LIBRARY_PATH`echo $(LDFLAGS) | \
                sed -e 's/-L/:/g' -e 's/ //g'`" \
        $(RUNSERIAL) ./H5make_libsettings$(EXEEXT) > $@ || \
            (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
            ($(RM) $@ ; exit 1)

=================================================================

Can you generate C files with a portable scripting language such as PERL ?

Can I proceed without this?
I will be building for embedded linux.
I can setup LD_LIBRARY_PATH manually.

Or in some cases, I will do a static build with my application.

Looks like I will have a similar problem with: H5detect.c which claims to generate "native.c"
But instead I see "

# Number format detection
# The LD_LIBRARY_PATH setting is a kludge.
# Things should have been all set during H5detect making.
# Remove the generated .c file if errors occur unless HDF5_Make_Ignore
# is set to ignore the error.
H5Tinit.c: H5detect$(EXEEXT)
        LD_LIBRARY_PATH="$$LD_LIBRARY_PATH`echo $(LDFLAGS) | \
                sed -e 's/-L/:/g' -e 's/ //g'`" \
        $(RUNSERIAL) ./H5detect$(EXEEXT) > $@ || \
            (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
            ($(RM) $@ ; exit 1)

------------------------------------------------------------------------
May, I use "HDF5_Make_Ignore" to get around this for now?

What are the side effects?

Cheers,
Ernest