【问题标题】:Gnu Scientific Library in iOSiOS 中的 Gnu 科学图书馆
【发布时间】:2023-03-31 04:05:01
【问题描述】:

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

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

【问题讨论】:

    标签: cocoa-touch gsl


    【解决方案1】:

    好的!对我有用的配置:

    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/库/iPhone/包括 -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"

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        这并不容易,但我采取了这些步骤来让它工作......

        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"。注释掉您实际上不需要的任何 #includes。

        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
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 罗伊。请进一步解释 cmets '并放入我需要的所有必要的 GSL 源文件。'?
          • 如果你想在 App Store 上发布它,你可能会遇到麻烦。有人认为,App Store 协议与保护 GSL 的 copyleft 许可不兼容。如果可能,我建议使用内置的 Accelerate 框架。
          猜你喜欢
          • 2013-10-31
          • 2014-12-17
          • 2023-03-06
          • 2012-08-03
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多