Hi John,

Thanks for this information.  This was definitely not the case when I first 
started building iOS apps (quite some time ago), so I’ll have to do some 
further research to make sure I can incorporate dynamic libraries if/when 
appropriate.

Cheers,
Nik.


> On 4 Jul 2022, at 1:16 pm, John Daniel <[email protected]> wrote:
> 
> Nik,
> You can definitely use dynamic linking in an iOS app. 
> 
> I don’t know how you would do that in CMake.
> 
> John Daniel
> Etresoft, Inc.
> 
>> On Jul 3, 2022, at 9:17 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
>> 
>> _______________________________________________
>> gdal-dev mailing list
>> [email protected]
>> https://lists.osgeo.org/mailman/listinfo/gdal-dev
> _______________________________________________
> gdal-dev mailing list
> [email protected]
> https://lists.osgeo.org/mailman/listinfo/gdal-dev


========================================================
NIK SANDS
Line Tamer | Time Traveller | Space Cadet

_______________________________________________
gdal-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to