使用Libpq将iPhone App连接到PostgreSQL [英] Connect iPhone App to PostgreSQL Using Libpq
问题描述
我需要为iPhone创建一个应用程序,该应用程序将使用libpq连接到PostgreSQL 8.4数据库。问题是我无法获得链接到libpq的简单iPhone进行编译。但是,我可以得到与普通Mac桌面应用程序相同的应用程序,可以毫无问题地编译并连接到PostgreSQL。我正在雪豹上运行的Xcode 3.2。
I need to create an application for the iPhone that will connect to a PostgreSQL 8.4 database using libpq. The problem is I can't get a simple iPhone that links to libpq to compile. I am however able to get the equivalent application that is a regular Mac desktop app to compile and connect to PostgreSQL without any issues. I'm on Xcode 3.2 running on Snow Leopard.
我正在为手臂和x86_84构建libpq。手臂构建用于真实的iPhone,x86_64用于iPhone模拟器。然后,我创建一个包含两个文件的胖二进制文件,最后得到一个名为libpq的文件。此文件是我在常规Mac应用程序中使用的文件,并且在尝试构建iPhone应用程序时可以正常工作并引起问题。
I'm building libpq for both arm and for x86_84. The arm build is for the real iPhone and the x86_64 is for the iPhone simulator to use. I then create a fat binary that contains both files and end up with a file named libpq. This file is the one I use in the regular Mac app and it works fine and causes issues when trying to build the iPhone app.
这是我构建时的构建脚本libpq。
Here is my build script when I build libpq.
#!/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
这是当我尝试从Xcode编译iPhone应用程序时的构建日志。
Here is the build log when I try to compile the iPhone app from within Xcode.
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
其他任何人都遇到了这个问题可以帮忙吗?
Anyone else run into this that can help out?
感谢
StartShip3000
Thanks StartShip3000
推荐答案
实际上不在库中链接。您已经将它所在的目录添加到了搜索路径中,但是在链接行的任何位置都看不到 -lpq
。
It looks like you are not actually linking in the library. You have added the directory it is in to your search path, but I don't see -lpq
anywhere on your link line.
此外,模拟器环境仅为32位,x86_64库无法与模拟器二进制文件一起使用。
Also, the simulator environment is 32 bit only, x86_64 libs won't work with simulator binaries.
这篇关于使用Libpq将iPhone App连接到PostgreSQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!