PS. Apologies - my last email (below) was premature and resulted from a lack
of effort on my own part.
I’ve solved this lastest issue now.
I don’t need Python bindings in this case, so the easiest solution (instead of
installing and/or pointing cmake to a compatible Python environment) is of
course just to add the following to my cmake command:
-DBUILD_PYTHON_BINDINGS=OFF
So my current cmake command for macOS now looks like this:
cmake -DBUILD_PYTHON_BINDINGS=OFF
-DSQLITE3_INCLUDE_DIR=$HOME/build/include
-DSQLITE3_LIBRARY=$HOME/build/lib/libsqlite3.a
-DCMAKE_INSTALL_PREFIX=$HOME/build -DCMAKE_BUILD_TYPE=Release ..
This results in a successful cmake, and then a successful build.
Thanks again to Even and others for the advice to get me this far. I expect I
will have more questions later when I try to build for iOS. :-)
Cheers,
Nik.
> On 4 Jul 2022, at 12:16 pm, Nik Sands <[email protected]> wrote:
>
> Hi Even,
>
> Thanks for the suggestions. I am now using '$HOME' instead of ‘~’. I’m
> using static libraries instead of dynamic libraries because my goal is to
> build GDAL for iOS once I get the process working for macOS and my
> understanding is that I cannot use dynamic linking in an iOS app (except for
> OS-bundled libraries).
>
> I’ve now attempted to build this way (using custom-built SQLite, as explained
> earlier):
>
> cd gdal-{VERSION}
> rm -r build
> mkdir build
> cd build
> cmake -DSQLITE3_INCLUDE_DIR=$HOME/build/include
> -DSQLITE3_LIBRARY=$HOME/build/lib/libsqlite3.a
> -DCMAKE_INSTALL_PREFIX=$HOME/build -DCMAKE_BUILD_TYPE=Release .. >log.txt 2>&1
>
> I found that it fails if I don’t include: -DCMAKE_BUILD_TYPE=Release
>
> Ignoring the CMake error log, as advised, and now just scanning sdout and
> stderr instead, I find that I get the following at about half-way through the
> output:
>
> ==========
> -- Found BISON: /usr/bin/bison (found version "2.3")
> Traceback (most recent call last):
> File
> "/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/swig/python/get_suffix.py",
> line 1, in <module>
> from setuptools.command.build_ext import EXTENSION_SUFFIXES;
> print(EXTENSION_SUFFIXES[0])
> ImportError: cannot import name 'EXTENSION_SUFFIXES'
> -- Target system: Darwin
> ==========
>
> I don’t really know where to go from here.
>
> Cheers,
> Nik.
>
>> On 1 Jul 2022, at 7:22 pm, Even Rouault <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> Nik,
>>
>> regarding the build isssue with Mac system sqlite3, I've filed this as
>> https://github.com/OSGeo/gdal/issues/6011
>> <https://github.com/OSGeo/gdal/issues/6011>
>>
>> regarding your other "Configuring incomplete, errors occurred!" issue, I've
>> found that generally the CMakeOutput.log and CMakeError.log files aren't the
>> best way to spot the issue. They contain a lot of "normal" errors such as
>> the one with iconv, that are due to trying to detect features available or
>> not available in the build environment, so it is expected that some
>> detections fail. You must have another issue, which is in the standard error
>> stream of the "cmake" invokation
>>
>> Run "cmake .. 2>&1 >log.txt" and look for "error" in log.txt
>>
>> You may also want to try to link to the dynamic library of libsqlite3 rather
>> than the static one (static linking is always more difficult to accomplish),
>> so something like -DSQLITE3_LIBRARY=$HOME/build/lib/libsqlite3.dylib
>>
>> I would also avoid using the '~' character for values of CMake variables and
>> rather use $HOME. On my Linux shell, I see the values in the CMakeCache.txt
>> are not expanded to full paths, and I doubt CMake will do it by itself.
>>
>> Even
>>
>> Le 01/07/2022 à 10:58, Nik Sands a écrit :
>>> Thanks again for all the replies and advice. I should have provided more
>>> context around my initial query about building GDAL with cmake on macOS.
>>> So here goes… (this is quite long, so bear with me…)
>>>
>>> My ultimate aim is to build GDAL 3.6 (not yet released) for iOS on ARM (as
>>> well as for macOS on Intel). I can then combine them into a fat library
>>> and use that in my project (which is what I've been doing successfully for
>>> GDAL 2.2.2 for some time). GDAL 3.6 isn't yet released, so I'm working
>>> with 3.5 for now in order to get my build process right.
>>>
>>> I believe that for iOS, I cannot use any 'homebrew' or 'macports' packages
>>> installed in /usr/local, etc, as dependencies for the GDAL build. They
>>> will likely work for macOS, but not for iOS. Therefore I will need to
>>> build any dependencies manually and install to another location (for both
>>> iOS and macOS), where they do not already exist in the standard macOS/iOS
>>> SDK locations (or where the Apple-supplied libraries in those SDK locations
>>> are otherwise incompatible with GDAL - see SQLite notes below). For any
>>> such dependencies, I plan to install them in ~/build (as I did previously
>>> for GDAL 2.2.2).
>>>
>>> So I'm starting out building simply for macOS, but trying to use a similar
>>> technique to what I hope to use for iOS (after I get it working for macOS).
>>>
>>> So with all that background, I will now start at the beginning of my
>>> attempts to build GDAL 3.5 using a method that I hope will also work for
>>> iOS...
>>>
>>> The GDAL cmake hints page says to do this:
>>>
>>> cd gdal-{VERSION}
>>> mkdir build
>>> cd build
>>> cmake ..
>>> cmake --build .
>>> cmake --build . --target install
>>>
>>> When I run this as-is, the 'cmake ..' succeeds, but the 'cmake --build .'
>>> fails at the 82% mark with this output:
>>>
>>> ==========
>>> [ 82%] Building CXX object
>>> ogr/ogrsf_frmts/sqlite/CMakeFiles/ogr_SQLite.dir/ogrsqlitedatasource.cpp.o
>>> /Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/ogr/ogrsf_frmts/sqlite/ogrsqlitedatasource.cpp:733:21:
>>> error: use of undeclared identifier 'sqlite3_enable_load_extension'
>>> if( sqlite3_enable_load_extension(hDB, 1) == SQLITE_OK )
>>> ^
>>> /Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/ogr/ogrsf_frmts/sqlite/ogrsqlitedatasource.cpp:746:21:
>>> error: use of undeclared identifier 'sqlite3_load_extension'
>>> if( sqlite3_load_extension(hDB, aosExtensions[i], nullptr,
>>> &pszErrMsg) != SQLITE_OK )
>>> ^
>>> 2 errors generated.
>>> make[2]: ***
>>> [ogr/ogrsf_frmts/sqlite/CMakeFiles/ogr_SQLite.dir/ogrsqlitedatasource.cpp.o]
>>> Error 1
>>> make[1]: *** [ogr/ogrsf_frmts/sqlite/CMakeFiles/ogr_SQLite.dir/all] Error 2
>>> make: *** [all] Error 2
>>> ==========
>>>
>>> So I then build SQLite manually, including the requirements that the
>>> built-in macOS SQLite seems to be missing, and install to ~/build. Ie,
>>>
>>> ./configure SQLITE_ENABLE_RTREE=1 --prefix=/Users/{USERNAME}/build
>>>
>>> Then I attempt to GDAL again as follows:
>>>
>>> cd gdal-{VERSION}
>>> rm -r build
>>> mkdir build
>>> cd build
>>> cmake -DSQLITE3_INCLUDE_DIR=~/build/include
>>> -DSQLITE3_LIBRARY=~/build/lib/libsqlite3.a ..
>>>
>>>
>>> Now cmake fails with:
>>>
>>> -- Configuring incomplete, errors occurred!
>>> See also "...../CMakeOutput.log".
>>> See also "...../CMakeError.log".
>>>
>>> The error log is fairly long, but two errors near the beginning seem to be
>>> perhaps quite significant:
>>>
>>> ld: library not found for -lSystem
>>>
>>> and a bit further on:
>>>
>>> ld: library not found for -lc++
>>>
>>> and then skipping to the end of the error log:
>>>
>>> ==========
>>> /Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c:8:19:
>>> error: use of undeclared identifier '_iconv_close'; did you mean
>>> 'iconv_close'?
>>> return ((int*)(&_iconv_close))[argc];
>>> ^~~~~~~~~~~~
>>> iconv_close
>>> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk/usr/include/iconv.h:78:36:
>>> note: 'iconv_close' declared here
>>> extern __LIBICONV_DLL_EXPORTED int iconv_close (iconv_t _cd);
>>> ^
>>> 1 error generated.
>>> make[1]: *** [CMakeFiles/cmTC_825af.dir/CheckSymbolExists.c.o] Error 1
>>> make: *** [cmTC_825af/fast] Error 2
>>>
>>>
>>> File
>>> /Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c:
>>> /* */
>>> #include <iconv.h>
>>>
>>> int main(int argc, char** argv)
>>> {
>>> (void)argv;
>>> #ifndef _iconv_close
>>> return ((int*)(&_iconv_close))[argc];
>>> #else
>>> (void)argc;
>>> return 0;
>>> #endif
>>> }
>>> ==========
>>>
>>> Now if I try the following:
>>>
>>> export LDFLAGS=-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib
>>> export CFLAGS="-isysroot
>>> /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"
>>> export CCFLAGS="-isysroot
>>> /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"
>>> export CXXFLAGS="-isysroot
>>> /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"
>>> export CPPFLAGS="-isysroot
>>> /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"
>>> cd gdal-{VERSION}
>>> rm -r build
>>> mkdir build
>>> cd build
>>> cmake -DSQLITE3_INCLUDE_DIR=~/build/include
>>> -DSQLITE3_LIBRARY=~/build/lib/libsqlite3.a ..
>>>
>>> Then the -lsystem and -lc++ errors disappear, but the iconv errors are
>>> still there.
>>>
>>> I’m clearly doing something quite wrong, but I’m just a hobbyist and cannot
>>> figure it out any further than this.
>>>
>>> Thanks for bearing with me if you’ve managed to read this far. I’d be
>>> grateful for some assistance to get this to build using cmake.
>>>
>>> Cheers,
>>> Nik.
>>>
>>> _______________________________________________
>>> gdal-dev mailing list
>>> [email protected] <mailto:[email protected]>
>>> https://lists.osgeo.org/mailman/listinfo/gdal-dev
>>
>> --
>> http://www.spatialys.com <http://www.spatialys.com/>
>> My software is free, but my time generally not.
>>
>
>
> ========================================================
> NIK SANDS
> Line Tamer | Time Traveller | Space Cadet
>
========================================================
NIK SANDS
Line Tamer | Time Traveller | Space Cadet
_______________________________________________
gdal-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev