Paul Eggert <egg...@cs.ucla.edu> writes:

> Thanks for reporting that. I installed this patch into Gnulib:
>
> https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=6457d2c190f47e2288c08f6a5e0dba412ff62855
>
> and propagated it into Emacs master:
>
> https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=799f78a92c6c31f4d181390523b83d036020ede1
>
> Please give it a try.

I spoke prematurely--this doesn't provide for endian.h implementations
that don't define functions where the source type's size is explicit in
the name such as are provided by the Android NDK r10b, with the result
that configure concludes that they should be redefined by Gnulib:

conftest.c: In function 'main':
conftest.c:18:1: error: implicit declaration of function 'be16toh' 
[-Werror=implicit-function-declaration]
 int value16_1 = be16toh (0.0);
 ^
conftest.c:19:1: error: implicit declaration of function 'be32toh' 
[-Werror=implicit-function-declaration]
 int value32_1 = be32toh (0.0);
 ^
conftest.c:20:1: error: implicit declaration of function 'be64toh' 
[-Werror=implicit-function-declaration]
 int value64_1 = be64toh (0.0);
 ^
conftest.c:28:1: error: implicit declaration of function 'le16toh' 
[-Werror=implicit-function-declaration]
 int value16_3 = le16toh (0.0);
 ^
conftest.c:29:1: error: implicit declaration of function 'le32toh' 
[-Werror=implicit-function-declaration]
 int value32_3 = le32toh (0.0);
 ^
conftest.c:30:1: error: implicit declaration of function 'le64toh' 
[-Werror=implicit-function-declaration]
 int value64_3 = le64toh (0.0);
 ^
cc1: some warnings being treated as errors

but because Gnulib's definitions are `inline', the functions provided in
the system endian.h acquire external linkage, and are duplicated across
every unit by which the redefinitions are included:

  CCLD     libemacs.so
/home/.../.../android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:
 error: frame.o: multiple definition of 'htobe16'
/home/.../.../android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:
 dispnew.o: previous definition here
/home/.../.../android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:
 error: frame.o: multiple definition of 'htobe32'
/home/.../.../android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:
 dispnew.o: previous definition here
/home/.../.../android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:
 error: frame.o: multiple definition of 'htobe64'
[...]

Reply via email to