2011-07-19 47 views

回答

-1

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

+0

如果您想要将它分发到App Store,可能会遇到麻烦。有人认为,App Store协议与保护GSL的copyleft许可证不兼容。如果可能,我会建议使用内置的Accelerate框架。 –

+0

罗伊。请进一步解释评论意见,并提交我需要的所有必需的GSL源文件。'? –

1

运行iOS的小型设备是32位系统。您需要重新构建适用于32位机器的Gnu Science Library(GSL),方法如下:./configure CFLAGS =“ - arch i386”,然后根据以下链接创建并链接新库文件到项目中:在你第一次尝试的教程。

上述声明的修订:该建议在获得适用于iOS模拟器的构建时可以正常工作,但尚不清楚GSL是否可以在不更改代码库的情况下为ARMv7架构成功构建。如果完全可能的话,似乎需要一个不同的工具链来构建GSL。

4

好的!为我工作的配置:

须藤的./configure --disable共享--disable依赖性跟踪 主机=的ARMv7-苹果darwin10 CFLAGS =“ - I /开发/平台/的iPhoneOS .platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/include -I/Library/iPhone/include -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk“ CC =” /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-gcc-4.2.1“ CPP = cpp LDFLAGS =” - isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/ iPhoneOS4.3.sdk“

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)您想在你的项目中使用的功能(S)。将这些.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