交叉编译freetds的到iPhone(Cross compiling FreeTDS to iPh

2019-06-26 04:59发布

因为这个问题没有答案,我花了我以为我会发布如何交叉编译freetds的0.91到iPhone的ARMv6,ARMv7架构多数学期认定它的。 这是使用的Xcode 4.2和iOS 5 SDK来完成。

这个问题是问,因为你正在为需要连接到SQL的Mircosoft Sever的,这需要使用表格格式数据流(TDS)协议,因为它是微软专有的iOS设备上的应用程序的原因。

我也提到,需要技术人员的技能水平有些甚至尝试此。 这是什么花了我近两个月来搞清楚(我离开了所有你不应该做的事情)一个非常浓缩版。

与此其他文档:

基本如何使用freetds的http://www.freetds.org/userguide/samplecode.htm

微软的TDS API文档http://msdn.microsoft.com/en-us/library/aa936985(v=sql.80)

见我的回答如下。

也看到了Xcode的4.5更新的文件saskathex答案。

Answer 1:

对于那些像我这样将花费数小时寻找文档,这些标准配置的标志(用于运行的./configure使make install的)

        ./configure --build is used for specifing the architecture you want to complie for
        ./configure --host is used to specify the ark of the machine doing the compileing (running xcode)
        ./configure --target seems to be an alias

那么,现在解决这个问题。

1)获取最新版本的freetds的的http://www.freetds.org/

2)下一步是使正常运行freetds的的./configure自己的bash shell文件。 您将需要两成的模拟器的i386 / i686的架构和一个苹果设备(iPhone,iPod的,等等)是ARM架构。 此外,iPhone开发目录中的文件的编译器/版本可能会有所不同,只要找到什么逻辑意义,并具有类似的命名约定。 该MAC架构主机与所述命令UNAME -p供给。

这里是我的建筑上使用模拟器(I386)build_for_simulator_i386.sh例如:

 #!/bin/sh

 #unset some shell variables
 unset CC
 unset CFLAGS
 unset CPP

 export buildPath=`pwd`

 # make i386 (Simulator) target
 export CC=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/i686-apple-darwin11-llvm-gcc-4.2

 export CFLAGS="-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk"

 # if you want Windows Authentication (NTLM) support you must use at least tds version 7
 # the default is 5
 ./configure --build=i386 --host=i386 --target=i386 --with-tdsver=7.1 

实施例用于配置用于ARM汇编(build_for_device_armv7.sh):

 #!/bin/sh

 # unset some shell variables
 unset CC
 unset CFLAGS
 unset CPP

 export buildPath=`pwd`

 # make arm target
 export CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2

 export CFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk"

 export CPP=/usr/bin/cpp


 ./configure --build=arm-apple-darwin10 --host=x86_64-apple-darwin11.3.0 --target=armv7 --with-tdsver=7.1

3)一张CD给促成从解压下载freetds的根目录freetds的,我的是freetds_0.91

4)运行脚本之一。 你只能在一个时间编译ONE架构

 sh build_for_(desiered build)  
        this runs ./configure for you with the correct options
        (tds version 7 required for NTLM authentication)

5)一旦配置过程完成后,你必须破解的配置文件。 然后线172变化的#define HAVE_ICONV 1打开freetds_0.91 /包含/ config.h中以#定义HAVE_ICONV 0

6)如果你以前的./configure跑,制造,安装做出然后运行这些命令。 特别是如果你的交换架构,你会得到错误的运行没有作出这样做

    sudo make clean
    sudo make uninstall

7)使用使执行编译

    make all
    sudo make install

本作过程确实通过故意一些错误,但如果您在shell提示的六条,七线看到的错误,一旦它返回,你有问题,需要在继续之前解决这些问题。 让我们只说很多事情可以在这一点上出问题。

8)安装二进制文件符合这是所有的小.o文件的高潮是使freetds的是/usr/local/lib/libsybdb.a相信我,你不想拉.o文件只是库后你要。 复制/usr/local/lib/libsybdb.a到项目相应的文件夹。 我所做的是有两个单独的文件夹,每一个建筑,名为“compiled_freetds-0.91_simulator_i386”和“compiled_freetds-0.91_device_armv7。”

9)既然你想要让你的生活简单而有Xcode中,找出使用该编译的文件遵循的步骤这个子集来执行动态链接。

 a) Select you project settings on the left had side of xcode 
 (the blue think with the name of your project on it)

 b) Select the Target (usual the same name as your app) 

 c) Navigate to **build settings**, scroll down to **linking > other linker flags**

 d) On the left side of Other Linker Flags a mouse over will reveal an expander,    
 expanding will reveal Debug and Release rows.

 e) Add the appriate architectures by selecting the plus on the right side of 
 either Debug or Release.  When the new row appears select the architecture, 
 double click the first editable field from the right to open  an entry box 
 that you can then drag the appropriate  complied file into it to be dynamically     
 linked.  You must do this for both files and when done correctly the file 
 under ARMv7 will be used when building for the device and the one for Any iOS   
 Simulator SDK will be used when running on the simulator.
 **Note:** You may also need to add the -all_load flag to resolve linking issues.

10)这似乎避免在设备上运行的代码时涉及libsybdb.5.dylib动态链接错误的问题的最后一步是使卸载。 此外,在设备上运行时,你也将获得大量的警告,在36个增量,约CPU_SUBTYPE_ARM_ALL被弃用,这是正常的,但恼人的。

    sudo make uninstall  

我希望这有帮助。



Answer 2:

我用上面的bash文件,但因为的XCode 4.5开发工具是应用程序束的内侧。 所以我修改了剧本与我的MacOS狮子与当前版本的XCode运行“4.5.2(4G2008a)”

build_for_simulator_i386.sh:

#!/bin/sh

# unset some shell variables
unset CC
unset CFLAGS
unset CPP

# make i386 (Simulator) target
export CC=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/i686-apple-darwin11-llvm-gcc-4.2
export CFLAGS="-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk"
export CPP=/usr/bin/cpp

./configure -build=i686-apple-darwin11 --host=i686-apple-darwin11 --target=i686-apple-darwin11 --with-tdsver=7.1

build_for_device_armv7.sh:

#!/bin/sh

# unset some shell variables
unset CC
unset CFLAGS
unset CPP

# make arm target
export CC=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
export CFLAGS="-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk"
export CPP=/usr/bin/cpp

./configure --build=arm-apple-darwin10 --host=x86_64-apple-darwin11 --target=armv7 --with-tdsver=7.1

一个不错的附加是使用lipinfo被两个静态库合并成一个

lipo compiled_freetds-0.91_device_armv7/libsybdb.a compiled_freetds-0.91_simulator_i386/libsybdb.a -create -output universal_libsybdb.a

而刚刚添加该到项目的设置。

想分享它,因为上面的脚本为我节省了很多时间。



文章来源: Cross compiling FreeTDS to iPhone