<div dir="ltr"><div>Hi.</div><div><br></div><div>Been building and rebuilding gdal-3.3.0-dev and arrive at this output:</div><div><br></div><div>chris@jacie:~$ gdalinfo --version<br>GDAL 3.3.0dev-96fab634a5, released 2021/03/02<br>free(): invalid pointer<br>Aborted</div><div><br></div><div>two version of libproj are involved:</div><div><br></div><div>chris@jacie:~$ ldd /usr/local/bin/gdalinfo | grep libproj<br>    libproj.so.22 => /usr/local/lib/libproj.so.22 (0x00007f3a6cecc000)<br> libproj.so.19 => /usr/local/lib/libproj.so.19 (0x00007f3a659da000)</div><div><br></div><div>This is because when built with libproj.so.22 only, gdalinfo complained libproj.so.19 couldn't be loaded on attempting to execute. libproj.so.22 is in /usr/local and prjo.h is from libproj.so.22, also in /usr/local. 19 is ln from /usr/local/lib.</div><div>in gdb I get:</div><div><br></div><div>gdb) set substitute-path /build/glibc-eX1tMB/glibc-2.31 /home/chris/glibc-2.31<br>(gdb) frame 1<br>#1  0x00007f8b2a4a3859 in __GI_abort () at abort.c:79<br>79           raise (SIGABRT);<br>(gdb) frame 2<br>#2  0x00007f8b2a50e3ee in __libc_message (action=action@entry=do_abort, <br>    fmt=fmt@entry=0x7f8b2a638285 "%s\n") at ../sysdeps/posix/libc_fatal.c:155<br>155         abort ();<br>(gdb) frame 3<br>#3  0x00007f8b2a51647c in malloc_printerr (<br>    str=str@entry=0x7f8b2a6364ae "free(): invalid pointer") at malloc.c:5347<br>5347      __libc_message (do_abort, "%s\n", str);<br>(gdb) frame 4<br>#4  0x00007f8b2a517cac in _int_free (av=<optimized out>, p=<optimized out>, <br>    have_lock=0) at malloc.c:4173<br>4173           malloc_printerr ("free(): invalid pointer");<br>(gdb) frame 5<br>#5  0x00007f8b27035480 in __gnu_cxx::new_allocator<char>::deallocate (<br>    this=0x557019391ff0, __p=<optimized out>)<br>    at /usr/include/c++/9/ext/new_allocator.h:119<br>119           deallocate(pointer __p, size_type)<br>(gdb) frame 6<br>#6  std::allocator_traits<std::allocator<char> >::deallocate (__a=..., <br>    __n=<optimized out>, __p=<optimized out>)<br>    at /usr/include/c++/9/bits/alloc_traits.h:470<br>470       { __a.deallocate(__p, __n); }<br>(gdb) frame 7<br>#7  std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_destroy (__size=<optimized out>, this=0x557019391ff0)<br>    at /usr/include/c++/9/bits/basic_string.h:237<br>237       { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); }<br>(gdb) frame 8<br>#8  std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_dispose (this=0x557019391ff0)<br>    at /usr/include/c++/9/bits/basic_string.h:232<br>232             _M_destroy(_M_allocated_capacity);<br>(gdb) frame 9<br>#9  std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string (this=0x557019391ff0, __in_chrg=<optimized out>)<br>    at /usr/include/c++/9/bits/basic_string.h:658<br>658          { _M_dispose(); }<br>(gdb) frame 10<br>#10 osgeo::proj::common::UnitOfMeasure::Private::~Private (<br>    this=0x557019391ff0, __in_chrg=<optimized out>) at iso19111/common.cpp:72<br>72      struct UnitOfMeasure::Private {<br>(gdb) frame 11<br>#11 std::default_delete<osgeo::proj::common::UnitOfMeasure::Private>::operator() (this=0x7f8b272e1f60 <osgeo::proj::common::UnitOfMeasure::PPM_PER_YEAR+16>, <br>    __ptr=0x557019391ff0) at /usr/include/c++/9/bits/unique_ptr.h:81<br>81          delete __ptr;<br>(gdb) frame 12<br>#12 std::unique_ptr<osgeo::proj::common::UnitOfMeasure::Private, std::default_delete<osgeo::proj::common::UnitOfMeasure::Private> >::~unique_ptr (<br>    this=0x7f8b272e1f60 <osgeo::proj::common::UnitOfMeasure::PPM_PER_YEAR+16>, <br>    __in_chrg=<optimized out>) at /usr/include/c++/9/bits/unique_ptr.h:292<br>292           get_deleter()(std::move(__ptr));<br>(gdb) frame 13<br>#13 osgeo::proj::common::UnitOfMeasure::~UnitOfMeasure (<br>    this=0x7f8b272e1f50 <osgeo::proj::common::UnitOfMeasure::PPM_PER_YEAR>, <br>    __in_chrg=<optimized out>) at ../include/proj/common.hpp:60<br>60        class PROJ_GCC_DLL UnitOfMeasure : public util::BaseObject {<br>(gdb) frame 14<br>#14 0x00007f8b2a4c815e in __cxa_finalize (d=0x7f8b1fdec720)<br>    at cxa_finalize.c:83<br>83                   cxafn (cxaarg, 0);<br>(gdb) frame 15<br>#15 0x00007f8b1fb399b7 in __do_global_dtors_aux ()<br>   from /usr/local/lib/libproj.so.19<br>(gdb) frame 16<br>#16 0x00007ffe33879550 in ?? ()<br>(gdb) frame 17<br>#17 0x00007f8b2d55ef5b in _dl_fini () at dl-fini.c:138<br>138                                  ((fini_t) array[i]) ();</div><div><br></div><div>Haven't been able to further clarify frame 16 function call. Which I guess would be useful. Any thoughts on how to proceed greatly appreciated.</div><div><br></div><div>Chris<br></div></div>