iliaal / php_excel

PHP Extension interface to the Excel writing/reading library
http://ilia.ws
533 stars 131 forks source link

error: excel module requires libxl >= 2.4.3 for aarch64 #279

Closed kdgeorgiev closed 1 year ago

kdgeorgiev commented 1 year ago
checking for gawk... gawk
checking whether to enable excel support... yes, shared
checking C include dir for libxl... yes, shared
checking lib dir for libxl... yes, shared
checking libxml2 install dir... yes, shared
checking for excel includes... found in /libxl/include_c/
checking for excel libraries... found in /libxl/lib-aarch64/
checking for libxml2... not found
checking for xlCreateBookCA in -lxl... no
configure: error: excel module requires libxl >= 2.4.3
sh-4.2#

I'v tried to install excel and libxl modules on arm64 - CentOS7. I'm using the latest packages for excel and libxl. Tried to install both extension on amd64 - CentOS7 and they went through without any issues.

Mmm.. I've tried adding a path as seen on previous issues but no luck with making the excel/libxl working on centOS7 - arm64.

Any suggestions ?

kdgeorgiev commented 1 year ago
configure:4180: checking for xlCreateBookCA in -lxl
configure:4205: cc -o conftest -g -O2  -Wl,-rpath,/libxl/lib-aarch64/ -L/libxl/lib-aarch64/  conftest.c -lxl   >&5
/libxl/lib-aarch64//libxl.so: undefined reference to `VTT for std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find_first_not_of(char const*, unsigned long, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `__cxa_throw_bad_array_new_length@CXXABI_1.3.8'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_stringstream<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_stringstream(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::_Ios_Openmode)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_stringbuf<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_sync(wchar_t*, unsigned long, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream(std::_Ios_Openmode)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::~basic_string()@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace_aux(unsigned long, unsigned long, unsigned long, char)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append(char const*, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::random_device::_M_init(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct(unsigned long, char)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `vtable for std::__cxx11::basic_stringbuf<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::operator=(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&&)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(unsigned long, unsigned long, char const*) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `vtable for std::__cxx11::basic_stringstream<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&&)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `vtable for std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::erase(unsigned long, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(char const*)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_assign(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::compare(wchar_t const*) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned long, wchar_t const*)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::push_back(char)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `vtable for std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_erase(unsigned long, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `vtable for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::assign(wchar_t const*)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_stringstream<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::~basic_stringstream()@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::resize(unsigned long, wchar_t)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, std::allocator<wchar_t> const&)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::compare(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::substr(unsigned long, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find_first_of(wchar_t const*, unsigned long, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find_first_not_of(char, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_stringstream<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_stringstream(std::_Ios_Openmode)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::erase(unsigned long, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::resize(unsigned long, char)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(unsigned long, unsigned long, char const*, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::reserve(unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_mutate(unsigned long, unsigned long, wchar_t const*, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::append(wchar_t const*)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::_M_sync(char*, unsigned long, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::push_back(wchar_t)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_append(wchar_t const*, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_construct(unsigned long, wchar_t)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(char const*)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const*, unsigned long, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_erase(unsigned long, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::swap(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find_last_not_of(char const*, unsigned long, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `operator delete(void*, unsigned long)@CXXABI_1.3.9'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find_last_not_of(char, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_replace(unsigned long, unsigned long, wchar_t const*, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_create(unsigned long&, unsigned long)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char const*, unsigned long, unsigned long) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `VTT for std::__cxx11::basic_stringstream<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(char const*) const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_stringbuf<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::str() const@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::swap(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_stringstream()@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_replace_aux(unsigned long, unsigned long, unsigned long, wchar_t)@GLIBCXX_3.4.21'
/libxl/lib-aarch64//libxl.so: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::rfind(wchar_t, unsigned long) const@GLIBCXX_3.4.21'
collect2: error: ld returned 1 exit status
configure:4205: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define EXCEL_WITH_LIBXML 1
| /* end confdefs.h.  */
|
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char xlCreateBookCA ();
| int
| main ()
| {
| return xlCreateBookCA ();
|   ;
|   return 0;
| }
configure:4214: result: no
configure:4391: error: excel module requires libxl >= 2.4.3
kdgeorgiev commented 1 year ago

Tried this workaround and I've managed to compile the excel & libxl for CentOS7-arm64.

https://github.com/iliaal/php_excel/issues/267#issuecomment-839662541

`You can trick the compilation to go all the way with libxl-3.9.4.3 by changing

ac_cv_lib_xl_xlCreateBookCA=no

into

ac_cv_lib_xl_xlCreateBookCA=yes

in the generated configure`

However I doubt this is a long term solution.

kdgeorgiev commented 1 year ago

Okay if you ever see this issue:

`std::__cxx11: and this in configure: error: excel module requires libxl >= 2.4.3 on any lib-aarch64 version you can resolve it without using the hack that changes the ./configure with the workaround above..

This happens because of the lib64 library on ARM infrastructure is not supported by default and it must be used with GNU/GCC compiler.

Please have in mind that if you're using Ubuntu or any other Linux distro except CentOs7 a compiler version 7.5 + would work perfectly.

However if you're on CentOS7 then apply version 10 or above.

gcc --version
gcc (GCC) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

To install gcc version above 7 + you can use the following article. https://www.jwillikers.com/build-gcc-from-source-on-centos-7

Then apply this command while trying to configure the libxl/excel for aarch64 ( arm infrastructure)

./configure --build=aarch64-redhat-linux --with-php-config=php-config --with-libxl-incdir=../libxl/include_c --with-libxl-libdir=../libxl/lib-aarch64 - Note this is for centOS7

If you're on Ubunto or other distro then apply --host=aarch64-linux-gnu or check the gcc help guide for your distro.

Closing this issue as its resolved and libxl&excel are now working.