Postgresql 使用iOS SDK 4.2编译libpq

Postgresql 使用iOS SDK 4.2编译libpq,postgresql,ios,compilation,ios-4.2,libpq,Postgresql,Ios,Compilation,Ios 4.2,Libpq,我正在尝试使用iOSSDK4.2再次编译arm和i386的libpq 去年我为SDK3.x做了,没有任何问题 现在,当我想要创建包含两个文件的fat二进制文件时,我得到以下错误: specifed architecture type (arm) for file (/Users/montx/mylibs_sdk42/libpq.arm) does not match its cputype (7) and cpusubtype (3) (should be cputype (12) and cp

我正在尝试使用iOSSDK4.2再次编译arm和i386的libpq

去年我为SDK3.x做了,没有任何问题

现在,当我想要创建包含两个文件的fat二进制文件时,我得到以下错误:

specifed architecture type (arm) for file (/Users/montx/mylibs_sdk42/libpq.arm) does not match its cputype (7) and cpusubtype (3) (should be cputype (12) and cpusubtype (0))
我再次编译,因为我编译的文件与最新的iOS4.2不兼容

Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
fcntl$UNIX2003 called from function pg_set_noblock in image GlobalScan.
If you are encountering this problem running a simulator binary within gdb, make sure you 'set start-with-shell off' first.
谢谢

以下是完整的脚本:

#!/bin/bash

DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
SDKROOT=$DEVROOT/SDKs/iPhoneOS4.2.sdk

rm -rf  /Users/montx/mylibs_sdk42
mkdir /Users/montx/mylibs_sdk42 #Store there compiled libs
make clean

#Build ARM library
./configure --host=arm-apple-darwin --without-readline --disable-ipv6 CC=$DEVROOT/usr/bin/arm-apple-darwin9-gcc-4.0.1 CPPFLAGS="-I$SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.0.1/include/ -I$SDKROOT/usr/include/" CFLAGS="$CPPFLAGS -arch armv6 -pipe -no-cpp-precomp -isysroot $SDKROOT" CPP="$DEVROOT/usr/bin/cpp $CPPFLAGS" LD=$DEVROOT/usr/bin/ld
make -C src/interfaces/libpq
cp /Users/montx/Downloads/postgresql-8.4.1/src/interfaces/libpq/libpq.a /Users/montx/mylibs_sdk42/libpq.arm


#Build ARM library
./configure --host=arm-apple-darwin --without-readline --disable-ipv6 CC=$DEVROOT/usr/bin/arm-apple-darwin9-gcc-4.0.1 CPPFLAGS="-I$SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.0.1/include/ -I$SDKROOT/usr/include/" CFLAGS="$CPPFLAGS -arch armv6 -pipe -no-cpp-precomp -isysroot $SDKROOT" CPP="$DEVROOT/usr/bin/cpp $CPPFLAGS" LD=$DEVROOT/usr/bin/ld



#Then build i386 library ==> the simulator is 32bits


CFLAGS="$(OTHER_CFLAGS) -mmacosx-version-min=10.5"
LDFLAGS="$(OTHER_LDFLAGS) -mmacosx-version-min=10.5"

make clean && ./configure CFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" && make -C src/interfaces/libpq


cp src/interfaces/libpq/libpq.a  /Users/montx/mylibs_sdk42/libpq.i386

#Then make fat binary
$DEVROOT/usr/bin/lipo -arch armv6 /Users/montx/mylibs_sdk42/libpq.arm -arch i386 /Users/montx/mylibs_sdk42/libpq.i386 -create -output  /Users/montx/mylibs_sdk42/libpq

这对我的arm库很有用,但我使用的是GCC4.2,目标是armv7

DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
SDKROOT=$DEVROOT/SDKs/iPhoneOS4.2.sdk
./configure --host=arm-apple-darwin --without-readline --disable-ipv6 \
  CC="$DEVROOT/usr/bin/gcc" \
  CPPFLAGS="-I$SDKROOT/usr/lib/gcc/arm-apple-darwin10/4.2.1/include/ \
            -I$SDKROOT/usr/include/" \
  CFLAGS="$CPPFLAGS -arch armv7 -pipe -no-cpp-precomp -isysroot $SDKROOT" \
  CPP="$DEVROOT/usr/bin/cpp $CPPFLAGS" \
  LD=$DEVROOT/usr/bin/ld 
make -C src/interfaces/libpq 
cp src/interfaces/libpq/libpq.a lib/libpq.arm
不过,我以前的模拟器脚本已经不起作用了,它在iOS 3.2上也能正常工作

DEVROOT=/Developer/Platforms/iPhoneSimulator.platform/Developer 
SDKROOT=$DEVROOT/SDKs/iPhoneSimulator4.2.sdk
$ROOT_DIR/configure --host=i386-apple-darwin  \
  CC="$DEVROOT/usr/bin/gcc" \
  CPPFLAGS="-I$SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.2.1/include/ \
            -I$SDKROOT/usr/include/ -mmacosx-version-min=10.5" \
  CFLAGS="$CPPFLAGS -arch i386 -pipe -no-cpp-precomp -isysroot $SDKROOT \
          -mmacosx-version-min=10.5" \
  CPP="$DEVROOT/usr/bin/cpp $CPPFLAGS" \
  LD=$DEVROOT/usr/bin/ld

make -C $ROOT_DIR/src/interfaces/libpq
已更新

这是完整的脚本。将bash脚本放到postgres目录中并生成。在项目中包括$POSTGRESDIR/src/include和$POSTGRESDIR/src/interfaces/libpq,以获得必要的标题。请注意,这适用于博士后8。我还没有在9年级的学生身上测试过

#!/bin/bash
set -e

if [ -d "./lib" ]
then
    echo "Existing libs deleted"
    rm -rf lib/*
else
    echo "Generating output directory"
    mkdir lib
fi

if [ -e "./src/Makefile.global" ]
then
    make -C ./src/interfaces/libpq distclean
fi

chmod u+x ./configure

#Build i386 library
DEVROOT=/Developer/Platforms/iPhoneSimulator.platform/Developer 
SDKROOT=$DEVROOT/SDKs/iPhoneSimulator4.2.sdk
./configure --host=i386-apple-darwin  --without-readline --disable-ipv6 \
  CC="$DEVROOT/usr/bin/gcc-4.2" \
  CPPFLAGS="-I$SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.2.1/include/ -I$SDKROOT/usr/include/ -mmacosx-version-min=10.5" \
  CFLAGS="$CPPFLAGS -arch i386 -pipe -no-cpp-precomp -isysroot $SDKROOT -mmacosx-version-min=10.5" \
  CPP="$DEVROOT/usr/bin/cpp $CPPFLAGS" \
  LD=$DEVROOT/usr/bin/ld

make -C ./src/interfaces/libpq
cp ./src/interfaces/libpq/libpq.a lib/libpq.i386

#Build ARM library
make -C ./src/interfaces/libpq distclean

DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
SDKROOT=$DEVROOT/SDKs/iPhoneOS4.2.sdk
./configure --host=arm-apple-darwin --without-readline --disable-ipv6 \
  CC="$DEVROOT/usr/bin/gcc-4.2" \
  CPPFLAGS="-I$SDKROOT/usr/lib/gcc/arm-apple-darwin10/4.2.1/include/ -I$SDKROOT/usr/include/" \
  CFLAGS="$CPPFLAGS -arch armv7 -pipe -no-cpp-precomp -isysroot $SDKROOT" \
  CPP="$DEVROOT/usr/bin/cpp $CPPFLAGS" \
  LD=$DEVROOT/usr/bin/ld 
make -C ./src/interfaces/libpq 
cp ./src/interfaces/libpq/libpq.a lib/libpq.arm
github上有一个项目“libpq ios”。我用过

http://devcenter.spacialdb.com/iOS.html