Frage

Ich brauche eine Anwendung für das iPhone erstellen, die zu einer PostgreSQL 8.4 Datenbank mit libpq verbinden. Das Problem ist, ich kann nicht ein einfaches iPhone erhalten, die zu kompilieren libpq verbindet. Ich bin jedoch in der Lage die entsprechende Anwendung zu erhalten, die ein regelmäßiger Mac-Desktop-App ist zu kompilieren und ohne Probleme zu PostgreSQL zu verbinden. Ich bin auf Xcode 3.2 auf Snow Leopard läuft.

Ich baue libpq für beiden Arme und x86_84. Der Arm Build ist für das reale iPhone und die x86_64 ist für das iPhone Simulator zu verwenden. Ich erstelle dann einen fetten Binärdatei, die beiden Dateien enthalten und mit einer Datei namens libpq enden. Diese Datei ist die, die ich in dem regulären Mac App verwenden und es funktioniert gut und führt zu Problemen beim Versuch, das iPhone-App zu bauen.

Hier ist mein Build-Skript, wenn ich libpq bauen.

#!/bin/bash

DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
SDKROOT=$DEVROOT/SDKs/iPhoneOS3.0.sdk

rm -rf  /Users/bob/mylibs
mkdir /Users/bob/mylibs #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/bob/Downloads/postgresql-8.4.1/src/interfaces/libpq/libpq.a /Users/bob/mylibs/libpq.arm

#Then build i386 library
make clean && ./configure  && make -C src/interfaces/libpq
cp src/interfaces/libpq/libpq.a  /Users/bob/mylibs/libpq.i386

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

Hier ist das Buildprotokoll, wenn ich versuche, den iPhone-App aus Xcode zu kompilieren.

Build iPhonePg of project iPhonePg with configuration Debug

Ld build/Debug-iphonesimulator/iPhonePg.app/iPhonePg normal i386
cd /Users/bob/Documents/Programming/PragProgrammerIphoneSDK/iPhonePg
setenv MACOSX_DEPLOYMENT_TARGET 10.5
setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk -L/Users/bob/Documents/Programming/PragProgrammerIphoneSDK/iPhonePg/build/Debug-iphonesimulator -L../../../../mylibs -L/Users/bob/Documents/Programming/PragProgrammerIphoneSDK/iPhonePg -L/Users/bob/Documents/Programming/PragProgrammerIphoneSDK/iPhonePg/../../../../mylibs -F/Users/bob/Documents/Programming/PragProgrammerIphoneSDK/iPhonePg/build/Debug-iphonesimulator -filelist /Users/bob/Documents/Programming/PragProgrammerIphoneSDK/iPhonePg/build/iPhonePg.build/Debug-iphonesimulator/iPhonePg.build/Objects-normal/i386/iPhonePg.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework CoreGraphics /Users/bob/Documents/Programming/PragProgrammerIphoneSDK/iPhonePg/libpq -o /Users/bob/Documents/Programming/PragProgrammerIphoneSDK/iPhonePg/build/Debug-iphonesimulator/iPhonePg.app/iPhonePg

ld: warning: in /Users/bob/Documents/Programming/PragProgrammerIphoneSDK/iPhonePg/libpq, missing required architecture i386 in file
Undefined symbols:
  "_PQclear", referenced from:
      -[iPhonePgAppDelegate applicationDidFinishLaunching:] in iPhonePgAppDelegate.o
  "_PQerrorMessage", referenced from:
      -[iPhonePgAppDelegate applicationDidFinishLaunching:] in iPhonePgAppDelegate.o
  "_PQconnectdb", referenced from:
      -[iPhonePgAppDelegate applicationDidFinishLaunching:] in iPhonePgAppDelegate.o
  "_PQfinish", referenced from:
      -[iPhonePgAppDelegate applicationDidFinishLaunching:] in iPhonePgAppDelegate.o
  "_PQstatus", referenced from:
      -[iPhonePgAppDelegate applicationDidFinishLaunching:] in iPhonePgAppDelegate.o
  "_PQexec", referenced from:
      -[iPhonePgAppDelegate applicationDidFinishLaunching:] in iPhonePgAppDelegate.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Noch jemand in diesem Lauf, die helfen können?

Danke StartShip3000

War es hilfreich?

Lösung

Es sieht aus wie Sie nicht wirklich in der Bibliothek zu verknüpfen. Sie haben das Verzeichnis hinzugefügt, um es in Ihrem Suchpfad ist, aber ich weiß nicht -lpq überall auf Ihrer Verbindungslinie sehen.

Auch die Simulator-Umgebung ist nur 32 Bit, x86_64 Libs nicht mit Simulator-Binärdateien arbeiten.

Andere Tipps

Ok bekam, um das Problem dank dem Kommentar von Louis. Ich tat dies durch Make-Datei Linie ändern, die die i386-Version gebaut. Ich habe CFLAGS = -arch i386" wie folgt aussehen

#Then build i386 library
make clean && ./configure CFLAGS="-arch i386" && make -C src/interfaces/libpq

ich jetzt ein anderes Problem, dass ich auf diesen Link eine neue Frage zu einem Referenz veröffentlichen werde.

Sie können mit PGSQLKit für iOS von http://www.postgresqlformac.com

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top