Научная библиотека Гну в iOS - PullRequest
0 голосов
/ 20 июля 2011

Как я могу использовать Научную библиотеку GNU в приложении для iOS?

Я пытался следовать этому руководству: http://www.os -scientific.org / devel / gslxcode / index.html .Но, похоже, это не работает для iOS таким образом, только для OS X. После того, как я добавил исходный код GSL в XCode с помощью «внешней системы сборки», XCode хочет создать цель этого подпроекта GSL для OS X SDK вместоiOS SDK.

Ответы [ 4 ]

4 голосов
/ 01 июля 2012

Хорошо!Конфигурация, которая работала для меня:

sudo ./configure --disable-shared --disable-зависимость-отслеживание --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 "

1 голос
/ 27 марта 2012

Небольшие устройства под управлением iOS являются 32-битными системами. Вам нужно будет перестроить Научную библиотеку Gnu (GSL) для 32-разрядных компьютеров, настроив процесс make следующим образом: ./configure CFLAGS = "- arch i386", затем создайте и свяжите новый файл библиотеки с вашим проектом в соответствии с учебник с первой попытки.

Пересмотр вышеприведенного утверждения: этот совет отлично работает при получении сборки, которая работает для симулятора iOS, но не ясно, что GSL можно даже успешно построить для архитектуры ARMv7 без изменения базы кода. Если это вообще возможно, может показаться, что для построения GSL нужна другая цепочка инструментов.

0 голосов
/ 28 июня 2014

Это было нелегко, но вот шаги, которые я предпринял, чтобы заставить его работать ...

1) Загрузите и извлеките последнюю версию GSL

2) В каталоге gsl, ./configure --disable-shared --disable-dependency-tracking CFLAGS="-DGSL_C99_INLINE -g -O2"

3) Создайте проект статической библиотеки Cocoa Touch в Xcode.

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
0 голосов
/ 13 августа 2011

Я не уверен, что есть лучший способ, но вот что я делаю: я создал новый проект "Cocoa Touch Static Library" на XCode и вставил все необходимые исходные файлы GSL, которые мне были нужны.Установите активную схему на «устройство iOS», если вы хотите запустить ее на iPhone (в противном случае она будет работать только на симуляторе iPhone).Затем создайте проект, и вы получите статическую библиотеку GSL, которая работает на iPhone!

...