iOS中的Gnu科学图书馆

时间:2011-07-19 23:04:55

标签: cocoa-touch gsl

如何在iOS应用程序中使用GNU Scientific Library?

我尝试过本教程:http://www.os-scientific.org/devel/gslxcode/index.html。但这似乎不适用于iOS,仅适用于OS X.在我使用“外部构建系统”将GSL源代码添加到XCode之后,XCode想要为OS X SDK构建该GSL子项目的目标,而不是iOS SDK。

4 个答案:

答案 0 :(得分:4)

确定!对我有用的配置:

  

sudo ./configure --disable-shared --disable-dependency-tracking   --host = armv7-apple-darwin10 CFLAGS =“ - I / Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS4.3.sdk / usr / include   -I / Library / iPhone / include -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk“   CC = “/开发/平台/ iPhoneOS.platform /开发人员的/ usr / bin中/ ARM-苹果darwin10-GCC-4.2.1”   CPP = cpp LDFLAGS =“ - isysroot   /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk“

答案 1 :(得分:1)

运行iOS的小型设备是32位系统。您需要通过如下配置make过程来重建32位机器的Gnu Science Library(GSL):./ configure CFLAGS =“ - arch i386”,然后根据以下内容制作新的库文件并将其链接到您的项目。第一次尝试教程。

上述声明的修订版:该建议适用于获取适用于iOS模拟器的构建,但目前尚不清楚GSL甚至可以在不更改代码库的情况下为ARMv7架构成功构建。如果可能的话,似乎需要一个不同的工具链来构建GSL。

答案 2 :(得分:0)

这并不容易,但这些是我采取的步骤......

1)下载并提取最新的GSL

2)在gsl目录中,./configure --disable-shared --disable-dependency-tracking CFLAGS="-DGSL_C99_INLINE -g -O2"

3)在Xcode中创建一个Cocoa Touch静态库项目。

4)将以下标题复制到项目中:config.h, build.h, gsl_machine.h

5)找到要在项目中使用的功能。将这些.c文件复制到您的项目中。

6)然后跟踪该功能,看看它调用的其他功能,一直到底部。

7)将这些功能所在的.c文件复制到您的项目中。

8)将这些函数定义所需的所有.h文件复制到项目中。

9)有一种更优雅的方法可以做到这一点,但对我来说,我只是采用了简单的路线并将#include <gsl/xxxxx.h>语句更改为#include "xxxxxx.h"。注释掉你实际上不需要的任何#include

10)在.c个文件中不需要的任何功能,您可以删除它们以减少需要使用的其他包含的数量。您可以删除它们,但我建议将#if 0#endif放在它们周围。万一你错过了某些东西,需要在以后加入。

11)构建并检查错误。如果您缺少某项功能,请为该功能添加.c文件,然后进行冲洗,重复。

我需要为项目添加gsl_cdf_tdist_P(),当我跟踪所有方法调用时,这是所需的所有函数的列表。 (具有* after的任何函数都是已经遇到的函数,所以我不需要追踪它):

gsl_cdf_tdist_P
    cornish_fisher
        poly_eval
    gsl_cdf_ugaussian_P
        gauss_small
        gauss_medium
            get_del
        gauss_large
            get_del*
    beta_inc_AXPY
        gsl_sf_gamma_inc_Q
            gsl_sf_gamma_inc_Q_e
                gamma_inc_P_series
                    gamma_inc_D
                        gsl_sf_lngamma_e
                            lngamma_1_pade
                            lngamma_2_pade
                            lngamma_lanczos
                            lngamma_sgn_0
                            lngamma_sgn_sing
                                gsl_sf_lnfact_e
                                    gsl_sf_lngamma_e*
                                gsl_sf_psi_int_e
                                gsl_sf_psi_1_int_e
                                gsl_sf_psi_n_e
                                    gsl_sf_psi_e
                                        psi_x
                                            cheb_eval_e*
                                    gsl_sf_psi_1_e
                                        psi_n_xg0
                                            gsl_sf_psi_e*
                                            gsl_sf_hzeta_e
                                            gsl_sf_lnfact_e*
                                            gsl_sf_exp_mult_err_e
                                    gsl_sf_hzeta_e*
                                    gsl_sf_lnfact_e*
                                    gsl_sf_exp_mult_err_e*
                            lngamma_lanczos*
                        gsl_sf_gammastar_e
                            gsl_sf_lngamma_e*
                            gsl_sf_exp_err_e
                            cheb_eval_e*
                            gammastar_ser
                    gsl_sf_exprel_n_CF_e
                        exprel_n_CF
                gamma_inc_Q_asymp_unif
                    gsl_sf_log_1plusx_mx_e
                        cheb_eval_e*
                    gsl_sf_erfc_e
                        cheb_eval_e*
                gamma_inc_Q_series
                gamma_inc_Q_CF
                    gamma_inc_D*
                    gamma_inc_F_CF
                        gsl_pow_3
                    gamma_inc_Q_large_x
                        gamma_inc_D*
                    gamma_inc_Q_CF*
                    gamma_inc_P_series*
        gsl_sf_gamma_inc_P
            gsl_sf_gamma_inc_P_e
                gamma_inc_P_series*
                gamma_inc_Q_asymp_unif*
                gamma_inc_Q_CF*
                gamma_inc_Q_large_x*
                gamma_inc_P_series*
        gsl_sf_lnbeta
            gsl_sf_lnbeta_e
                gsl_sf_lnbeta_sgn_e
                    isnegint
                    gsl_sf_gammastar_e*
                    gsl_sf_log_1plusx_e
                        cheb_eval_e*
                    gsl_sf_lngamma_sgn_e
                        lngamma_1_pade*
                        lngamma_2_pade*
                        lngamma_lanczos*
                        lngamma_sgn_0*
                        lngamma_sgn_sing*
        beta_cont_frac

答案 3 :(得分:-1)

我不确定是否有更好的方法,但这就是我的工作: 我在XCode上创建了一个新的“Cocoa Touch Static Library”项目,并输入了我需要的所有必需的GSL源文件。如果要在iPhone上运行,请将活动方案设置为“iOS设备”(否则,它仅适用于iPhone模拟器)。然后构建项目,你将得到适用于iPhone的静态GSL库!