如何在iOS應用程序中使用GNU科學圖書館?iOS中的Gnu科學圖書館
我試過以下教程:http://www.os-scientific.org/devel/gslxcode/index.html。但似乎這種方式不適用於iOS,僅適用於OS X.在使用「外部構建系統」將XSLT的GSL源代碼添加到XCode後,XCode想要爲OS X SDK構建該GSL子項目的目標,而不是iOS SDK。
如何在iOS應用程序中使用GNU科學圖書館?iOS中的Gnu科學圖書館
我試過以下教程:http://www.os-scientific.org/devel/gslxcode/index.html。但似乎這種方式不適用於iOS,僅適用於OS X.在使用「外部構建系統」將XSLT的GSL源代碼添加到XCode後,XCode想要爲OS X SDK構建該GSL子項目的目標,而不是iOS SDK。
我不確定是否有更好的方法,但這裏是我所做的: 我在XCode上創建了一個新的「Cocoa Touch Static Library」項目,並放入了我需要的所有必需的GSL源文件。如果你想在iPhone上運行,將活動方案設置爲「iOS設備」(否則,它只能在iPhone模擬器上運行)。然後建立項目,你會得到你的靜態GSL庫在iPhone上工作!
運行iOS的小型設備是32位系統。您需要重新構建適用於32位機器的Gnu Science Library(GSL),方法如下:./configure CFLAGS =「 - arch i386」,然後根據以下鏈接創建並鏈接新庫文件到項目中:在你第一次嘗試的教程。
上述聲明的修訂:該建議在獲得適用於iOS模擬器的構建時可以正常工作,但尚不清楚GSL是否可以在不更改代碼庫的情況下爲ARMv7架構成功構建。如果完全可能的話,似乎需要一個不同的工具鏈來構建GSL。
好的!爲我工作的配置:
須藤的./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「
這是不容易的,但這些都是我把得到它的工作步驟...
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
如果您想要將它分發到App Store,可能會遇到麻煩。有人認爲,App Store協議與保護GSL的copyleft許可證不兼容。如果可能,我會建議使用內置的Accelerate框架。 –
羅伊。請進一步解釋評論意見,並提交我需要的所有必需的GSL源文件。'? –