Note that there are some explanatory texts on larger screens.

plurals
  1. POBuild ICU for 64 bit iOS
    text
    copied!<p>I'm trying to move my app to 64 bit arm processors (and 64 bit simulator), and for that I need to recompile the ICU library (49).</p> <p>After three days I reached the point where the library compiles fine, and the script I'm using puts together various architectures into one (snippet):</p> <pre><code># ... #x86_64 DEVROOT=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer SDKROOT=$DEVROOT/SDKs/iPhoneSimulator7.0.sdk SYSROOT=$SDKROOT export CFLAGS="-I$SDKROOT/usr/include/ -I./include/ $ICU_FLAGS -arch x86_64 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=7.0 -O3 -DU_HAVE_GCC_ATOMICS=0" export CXXFLAGS="$CFLAGS" export CC="$TOOLCHAINSROOT/usr/bin/clang" export CXX="$TOOLCHAINSROOT/usr/bin/clang++" export LDFLAGS="-L$SDKROOT/usr/lib/ -isysroot $SDKROOT -Wl,-dead_strip -miphoneos-version-min=7.0" mkdir -p $BUILDDIR/iosbuild/x86_64 cd $BUILDDIR/iosbuild/x86_64 gnumake clean sh $ICU_PATH/source/configure --host=arm-apple-darwin --enable-static --disable-shared -with-cross-build=$BUILDDIR/hostbuild --prefix=$BUILDDIR/iosbuild/x86_64 --with-data-packaging=library gnumake gnumake clean install # ... #x86_64 mkdir -p ${BUILDDIR}/iosbuild/x86_64/lib/libicudata cd ${BUILDDIR}/iosbuild/x86_64/lib/libicudata ar -x "${BUILDDIR}/iosbuild/x86_64/lib/libicudata.a" mkdir -p ${BUILDDIR}/iosbuild/x86_64/lib/libicui18n cd ${BUILDDIR}/iosbuild/x86_64/lib/libicui18n ar -x "${BUILDDIR}/iosbuild/x86_64/lib/libicui18n.a" mkdir -p ${BUILDDIR}/iosbuild/x86_64/lib/libicuio cd ${BUILDDIR}/iosbuild/x86_64/lib/libicuio ar -x "${BUILDDIR}/iosbuild/x86_64/lib/libicuio.a" mkdir -p ${BUILDDIR}/iosbuild/x86_64/lib/libicule cd ${BUILDDIR}/iosbuild/x86_64/lib/libicule ar -x "${BUILDDIR}/iosbuild/x86_64/lib/libicule.a" mkdir -p ${BUILDDIR}/iosbuild/x86_64/lib/libiculx cd ${BUILDDIR}/iosbuild/x86_64/lib/libiculx ar -x "${BUILDDIR}/iosbuild/x86_64/lib/libiculx.a" mkdir -p ${BUILDDIR}/iosbuild/x86_64/lib/libicutest cd ${BUILDDIR}/iosbuild/x86_64/lib/libicutest ar -x "${BUILDDIR}/iosbuild/x86_64/lib/libicutest.a" mkdir -p ${BUILDDIR}/iosbuild/x86_64/lib/libicutu cd ${BUILDDIR}/iosbuild/x86_64/lib/libicutu ar -x "${BUILDDIR}/iosbuild/x86_64/lib/libicutu.a" mkdir -p ${BUILDDIR}/iosbuild/x86_64/lib/libicuuc cd ${BUILDDIR}/iosbuild/x86_64/lib/libicuuc ar -x "${BUILDDIR}/iosbuild/x86_64/lib/libicuuc.a" ar -qc ${BUILDDIR}/iosbuild/x86_64/lib/libcombinedicu.a ${BUILDDIR}/iosbuild/x86_64/lib/libicudata/*.o ${BUILDDIR}/iosbuild/x86_64/lib/libicudata/*.ao ${BUILDDIR}/iosbuild/x86_64/lib/libicuuc/*.ao ${BUILDDIR}/iosbuild/x86_64/lib/libicui18n/*.ao ${BUILDDIR}/iosbuild/x86_64/lib/libicuio/*.ao ${BUILDDIR}/iosbuild/x86_64/lib/libicule/*.ao ${BUILDDIR}/iosbuild/x86_64/lib/libiculx/*.ao ${BUILDDIR}/iosbuild/x86_64/lib/libicutest/*.ao ${BUILDDIR}/iosbuild/x86_64/lib/libicutu/*.ao ${BUILDDIR}/iosbuild/x86_64/lib/libicuuc/*.ao # ... #put them together lipo -create -arch x86_64 "${BUILDDIR}/iosbuild/x86_64/lib/libcombinedicu.a" -arch i386 "${BUILDDIR}/iosbuild/i386/lib/libcombinedicu.a" "${BUILDDIR}/iosbuild/arm64/lib/libcombinedicu.a" "${BUILDDIR}/iosbuild/armv7s/lib/libcombinedicu.a" -arch armv7 "${BUILDDIR}/iosbuild/armv7/lib/libcombinedicu.a" -o "$FRAMEWORK_DIR/Versions/Current/$FRAMEWORK_NAME" </code></pre> <p>The problem is, when I'm compiling the app from XCode (for the 64 bit simulator), I get the following errors regarding the built ICU framework:</p> <pre><code>ld: warning: directory not found for option '-F"/Users/gliptak/ac/m-220/Sources/VBExplorer/BIMxPro/../BIMxEngine/extern/icu"' duplicate symbol _OSAtomicIncrement32 in: /Users/gliptak/ac/m-220/Sources/VBExplorer/BIMxEngine/extern/icu/ICU.framework/ICU(unistr.ao) /Users/gliptak/ac/m-220/Sources/VBExplorer/BIMxEngine/extern/icu/ICU.framework/ICU(mutex.ao) duplicate symbol _OSAtomicIncrement32Barrier in: /Users/gliptak/ac/m-220/Sources/VBExplorer/BIMxEngine/extern/icu/ICU.framework/ICU(unistr.ao) /Users/gliptak/ac/m-220/Sources/VBExplorer/BIMxEngine/extern/icu/ICU.framework/ICU(mutex.ao) duplicate symbol _OSAtomicDecrement32 in: /Users/gliptak/ac/m-220/Sources/VBExplorer/BIMxEngine/extern/icu/ICU.framework/ICU(unistr.ao) /Users/gliptak/ac/m-220/Sources/VBExplorer/BIMxEngine/extern/icu/ICU.framework/ICU(mutex.ao) duplicate symbol _OSAtomicDecrement32Barrier in: /Users/gliptak/ac/m-220/Sources/VBExplorer/BIMxEngine/extern/icu/ICU.framework/ICU(unistr.ao) /Users/gliptak/ac/m-220/Sources/VBExplorer/BIMxEngine/extern/icu/ICU.framework/ICU(mutex.ao) ... ld: 64 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) </code></pre> <p><strike>As far as I can tell the mentioned functions are declared in system headers, and are not inline, so how can this error exist?</strike></p> <p>Do you have any ideas what I might do wrong?</p> <p><strong>UPDATE:</strong> indeed, those functions are static inline, so they cause the problem. So the question is now how do I avoid duplication?</p> <p><strong>UPDATE:</strong> tried the -std=gnu89 flag for the C compiler, no effect...</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload