2011-07-19 74 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