0

如何在 iOS 应用程序中使用 GNU 科学库?

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

4

4 回答 4

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="/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"

于 2012-07-01T08:32:28.530 回答
1

运行 iOS 的小型设备是 32 位系统。你需要为 32 位机器重建 Gnu 科学库 (GSL),方法如下:./configure CFLAGS="-arch i386",然后根据第一次尝试教程。

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

于 2012-03-27T10:35:32.333 回答
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您实际上不需要的任何 s。

10)这些文件中不需要的任何功能.c,您可以删除它们以减少您需要使用的其他包含的数量。您可以直接删除它们,但我建议将它们放在#if 0周围#endif。以防万一您错过了某些内容并需要稍后包含它们。

11) 构建并检查错误。如果您缺少一个函数,请包含该函数的.c文件,冲洗,重复。

我需要包含gsl_cdf_tdist_P()在我的项目中,当我跟踪所有方法调用时,这是所有需要的函数的列表。(任何带有 * 的函数都是已经遇到过的,所以我不需要追踪它):

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
于 2014-06-27T21:01:32.670 回答
-1

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

于 2011-08-13T02:11:08.060 回答