Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/43: Рейтинг темы: голосов - 43, средняя оценка - 4.88
 Аватар для Asdprom
23 / 22 / 6
Регистрация: 19.12.2011
Сообщений: 75

Сборка библиотеки

04.06.2012, 13:04. Показов 8859. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Есть библиотека для работы с большими числами - GMP.
GMP
Скачав архив я обнаружил в нем много - много .h и .с файлов. Не подскажете, как эту толпу файлов собрать в одну либу? ( lib или dll файл ).
Всем спасибо)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.06.2012, 13:04
Ответы с готовыми решениями:

Сборка библиотеки
Имеется библиотека, созданная в Qt Creator. Если исходник библиотеки собрать как приложение (TEMPLATE = app в про файле), то она без...

Сборка библиотеки qwt
Добрый вечер!:) собирала опираясь на эту статью http://qtlinux.narod.ru/install_qwt.htm для Windows, версия qwt 6.0.1 я вводила...

сборка библиотеки из сорсов qt 4.8.4
Вообщем мне нужно собрать библиотеку qt 4.8.4 из сорсов .. динамически вместе с поддержкой MySql .. в сети нахожу только статическую...

9
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
04.06.2012, 13:51
На сколько я понял, там не предусмотрена сборка под виндовс. Хотя, на их сайте написано, что были случаи, когда оно работало под виндовсом.
1
 Аватар для Asdprom
23 / 22 / 6
Регистрация: 19.12.2011
Сообщений: 75
05.06.2012, 12:12  [ТС]
Но ведь под Visual Studio под Win7 пошло же! Неужели для Qt 4.7 нельзя это забацать?
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
05.06.2012, 14:27
Цитата Сообщение от Asdprom Посмотреть сообщение
Но ведь под Visual Studio под Win7 пошло же!
Вроде, там нет скрипта, для создания Makefile под виндовс... как получилось под VS собрать?
0
 Аватар для Asdprom
23 / 22 / 6
Регистрация: 19.12.2011
Сообщений: 75
05.06.2012, 15:41  [ТС]
Собирать, то не собирал, воспользовался собранным с этого сайта.
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
05.06.2012, 17:40
Ну так там же есть и под MinGW готовое. В Qt изначально компилятор MinGW используется.
0
 Аватар для Asdprom
23 / 22 / 6
Регистрация: 19.12.2011
Сообщений: 75
05.06.2012, 21:17  [ТС]
Есть то оно есть, но внутри, там две либы в формате .a и .la. Насколько я понимаю, это для linux.
Только если динамическую библиотеку пробовать, но оно у меня как - то не срослось)
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
06.06.2012, 08:25
Цитата Сообщение от Asdprom Посмотреть сообщение
Есть то оно есть, но внутри, там две либы в формате .a и .la. Насколько я понимаю, это для linux.
Они для MinGW подходят. MinGW - это вообще портированный под виндовс gcc, который использовался в линуксе. Поэтому они во многом похожи.
Просто в файле проекта добавь
Code
1
LIBS += -L<путь к папке, где лежать эти файлы> -l<имя самого файла>
2
 Аватар для Asdprom
23 / 22 / 6
Регистрация: 19.12.2011
Сообщений: 75
06.06.2012, 09:39  [ТС]
Спасибо за ответы, нашел сборку для WIN7 GMP под Win7. Теперь все стало понятно. Там в конце ссылка на результат ( не рабочая ) - Чтобы скачать файл -
Правой кнопкой мыши, копировать ссылку, вставляем в адресную строку, и добавляем : после http
Результат Здесь
0
 Аватар для Asdprom
23 / 22 / 6
Регистрация: 19.12.2011
Сообщений: 75
08.06.2012, 14:45  [ТС]
Небольшое дополнение к инструкции:
GMP - это свободная библиотека для производства различных арифметических действий над целыми, рациональными и действительными числами. Разрядность чисел, с которыми работает библиотека ограничивется памятью самой машины. На многих сайтах пишут что GMP самая быстрая.

В GMP входят следующие категории функций:

Функции для работы с целыми числами (mpz).

Функции для работы с рациональными числами (mpq).

Функции для работы с числами с плавающей запятой (mpf).

Низкоуровневые функции для работы с натуральными числами (mpn).


Ну что же попробуем собрать GMP под Windows. Для этого надо скачать кое какие дистрибутивы, для начала сам GMP http://gmplib.org/ (текущая на данный момент 5.0.5), затем mingw - http://sourceforge.net/projects/mingw/files/ (лично я его не качал, т.к. я любитель Qt то я пользую mingw из поставки Qt Creator), затем MSYS - http://www.mingw.org/wiki/msys (здесь ссылка на свежак). ОК теперь все это дело устанавливаем, начинаем с mingw - ставим в c:\mingw (но это у меня), затем MSYS(во время установки указываем каталог с mingw, но если вы этого не сделали ни беда, в папке etc есть файлик fstab.sample, залазте в него, редактируйте пути и переименовывайте в fstab). Распаковываем архив с GMP в C:\MinGW\msys\1.0\home\agapiy (C:\MinGW\msys\1.0 - папка с установленным MSYS, home\agapiy - рабочая папка пользователя ("agapiy"-имя пользователя)). Кликаем по иконке MSYS на рабочем столе, появляется консоль. Также MinGW и msys можно установить через mingw-get-inst (что гораздо проще).

1. mkdir gmp #создаем каталог, сюда будут сбрасываться результаты сборки

2. cd gmp-5.0.5 #переходим в каталог с сырцами GMP

Сначало собирем для MinGW под Win (результат статическая библиотека libgmp.a)

./configure --prefix=/home/agapiy/gmp #конфигурируем GMP перед сборкой, /home/agapiy/gmp куда записываем результат компиляции, у вас скорее всего будет другая папка.

Идем курить...// Курить пришлось очень долго... Почти 2 ч длилась только первая операция

Если без ошибок продолжаем дальше.

make #собираем

make check #проверяем (на сайте разработчика это рекомендуют сделать)

make install #устанавливаем в папку GMP

make clean #убираемся

Итак, теперь в /home/agapiy/gmp были созданы папки include (gmp.h), lib(libgmp.a и libgmp.la) и share копируем файлы в соответствующие папки MinGW ( ВАЖНО!!! )

Теперь собирем dll

./configure --prefix=/home/agapiy/gmp --disable-static --enable-shared

make && make check && make install ВНИМАНИЕ!!! ВАЖНО!!! Не в коем случае не выполнять make clean
В противном случае придется собирать все заново.
В /home/agapiy/gmp добавилась папка bin(libgmp-10.dll (хотя программа собранная VS2010 требует libgmp-3.dll и libgmp-3.lib - может кто объяснит почему так?????? - потому что во время выполнения операций создается несколько фалов с одинаковыми именами и чтоб не было путаницы добавляется число 10 ( ИМХО ), просто переименуйте libgmp-10.dll в libgmp-3.dll)), в lib добавился libgmp.dll.a
ЕСЛИ ВЫ ВЫПОЛНИЛИ MAKE CLEAN , ТО ПАПКА .libs БУДЕТ УДАЛЕНА, СООТВЕТСТВЕННО НЕ БУДЕТ И libgmp-10.dll.def!
В текущей папке была создана папка .libs, в ней был создан файл libgmp-10.dll.def (переименуйте его в libgmp-3.def), его мы и передадим утилите lib из VC, для сборки из него файла libgmp-3.lib. Действуем
НО ДОПОЛНЕНИЕ: ИДЕМ ( ЕСЛИ УСТАНОВЛЕНА VS ) C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\ ПЕРЕНОСИМ ДВА ФАЙЛА LIB.EXE И LINK.EXE В ПАПКУ .libs ЕСЛИ НЕТ, ТО ПРИДЕТСЯ ИСКАТЬ ИЛИ УСТАНАВЛИВАТЬ VS. ВОЗНИКАЕТ ОШИБКА , что система не может найти файл mspdb80.dll поиск VS 9.0 ( у меня ) находим, переносим его в system32.
cd .libs

lib /machine:x86 /def:libgmp-3.def
радуемся собранной библиотеке. завтра напишу, как прикрепить ее к проекту QT Creator

Добавлено через 13 часов 38 минут
Теперь про подключение полученной библиотеки к Qt Creator.

1. В левом верхнем углу находиться вкладка Проекты. Выделяем необходимый нам проект -> Правой кнопкой мыши по названию-> Добавить библиотеку.
2. Появляется окно :
Три варианта -
ТИП БИБЛИОТЕКИ: Внутренняя , внешняя , системная.
3. Выбираем внешнюю библиотеку.
4. Переносим файлы libgmp-3.lib, gmp.h и libgmp-3.def в папку нашего проекта ( не обязательно, можно указать весь путь, а можно и так ) .
5. Файл Библиотеки -> обзор-> выбираем libgmp-3.lib.
В файле .pro появляется такие строки
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/ -llibgmp-3
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/ -llibgmp-3d/// ВНИМАНИЕ БУКВУ d ПОСЛЕ ИМЕНИ СТЕРЕТЬ!
else:symbian: LIBS += -llibgmp-3
else:unix: LIBS += -L$$PWD/ -llibgmp-3
 
INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/
 
win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/libgmp-3.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/libgmp-3d.lib/// ВНИМАНИЕ БУКВУ d ПОСЛЕ ИМЕНИ СТЕРЕТЬ!
else:unix:!symbian: PRE_TARGETDEPS += $$PWD/liblibgmp-3.a
Стираем букву d после имени библиотеки.

Далее в файле main.cpp пишем
C++ (Qt)
1
#include "gmp.h"
И пишем дальше
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <QtCore/QCoreApplication>
#include <conio.h>
#include <stdio.h>
#include "gmp.h"
 
 
 
int main ( int argc, char *argv[] )
{
 
   QCoreApplication a(argc, argv);
   mpz_t x;
   mpz_init_set_si(x, 1);
 
   for ( int i = 0; i < 100; i ++ )
      mpz_add ( x, x, x );
 
   mpz_out_str ( stdout, 10, x );
 
 
   getch();
 
   return a.exec();
}
это пример.
Результат : 1267650600228229401496703205376
Если надо, то выложу описание функций ( по мере перевода )

Добавлено через 1 час 43 минуты
//======================================== =======================================
Функции инициализации и присвоения
//======================================== =======================================
Для удобства, GMP обеспечивает параллельную серию инициализации и набор функций, которые инициализируют переменную, а затем сохраняют это значение там. Имена таких функций имеют вид mpz_init_set...

Вот пример использования одного:

C++ (Qt)
1
2
3
4
5
6
7
8
{
        mpz_t pie;
        mpz_init_set_str (pie,  "3141592653589793238462643383279502884", 10); //Инициализация pie числом из строки  в десятичную систему исчисления
        ...
        mpz_sub (pie, ...);
        ...
        mpz_clear (pie);
      }
После целого инициализирован любым из mpz_init_set... функции, он может быть использован в качестве источника или операнда для обычных целых функций. Не используйте инициализации и набор функций от одной переменной уже инициализирован!
- Функция: void mpz_init_set (mpz_t ROP, mpz_t ор);
- Функция: void mpz_init_set_ui (mpz_t ROP, unsigned long int op);
- Функция: void mpz_init_set_si (mpz_t ROP, signed long int ор);
- Функция: void mpz_init_set_d (mpz_t ROP, double ор);

Инициализация ROP с конечности пространства(???) и установить начальное числовое значение из ор.

- Функции: int mpz_init_set_str (mpz_t ROP, char * str, int base);

Инициализация ROP и установите его значение как mpz_set_str (см. документацию выше ).

Если строка имеет правильный номер базы base, функция возвращает 0, если произошла ошибка, она возвращает -1 ROP инициализируется даже в случае возникновения ошибки.. (То есть, вы должны обратиться mpz_clear, из - за этого.)

Добавлено через 33 минуты
//======================================== =======================================
Функции инициализации
//======================================== =======================================
Функции целочисленной арифметики предполагают, что все целые объекты инициализируются. Вы делаете это с помощью вызова функции mpz_init . Например,

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
{
        mpz_t integ;
        mpz_init (integ);
        ...
        mpz_add (integ, ...);
        ...
        mpz_sub (integ, ...);
     
        / * Если программа собирается завершиться, сделать ...  * /
        mpz_clear (integ);
      }
Как вы видите, вы можете сохранить новые значения любое количество раз, когда объект инициализируется.
- Функция: void mpz_init (mpz_t х)

Инициализация х, и устанавливает его значение в 0.

- Функция: void mpz_inits (mpz_t х, ...)

Инициализация NULL-завершенного списка mpz_t переменных, и установить их в 0.

- Функция: void mpz_init2 (mpz_t х, mp_bitcnt_t n)

Инициализация х, с местом для n-разрядных чисел, установка его значения в 0. Вызов этой функции вместо mpz_init или mpz_inits никогда не нужен, перераспределение осуществляется автоматически с помощью GMP, когда это необходимо.

n только исходное поле, х будет автоматически увеличиваться в обычном порядке, в случае необходимости, для последующего значения сохраняются. mpz_init2 позволяет избежать таких перераспределений, если максимальный размер известен заранее.

- Функция: void mpz_clear (mpz_t х)

Высвобождение памяти, занимаемого х. Вызывайте эту функцию для всех mpz_t переменных, когда вы закончили с ними работу.

- Функция: void mpz_clears (mpz_t х, ...)

Высвобождение памяти, занимаемое NULL-завершенным списком mpz_t переменных.

- Функция: void mpz_realloc2 (mpz_t х, mp_bitcnt_t n)

Изменить память, выделенную для х n бит. Значение х сохраняется, если она подходит, или значение 0, если нет.

Вызов этой функции никогда не бывает необходимым, перераспределение осуществляется автоматически с помощью GMP, когда это необходимо. Но эта функция может быть использована для увеличения пространства для переменных для того, чтобы избежать повторного автоматического перераспределения, или уменьшить его, чтобы вернуть память обратно в кучу.
PS. Простите за несколько корявый перевод ( все - таки вручную ) но смысл ясен.

Добавлено через 33 минуты
Список всех функций ( англ. )
GMP FUNC
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.06.2012, 14:45
Помогаю со студенческими работами здесь

Сборка библиотеки
Возникла необходимость написать на C++ собственную библиотеку для Lua. Для начала компилирую тестовую библиотеку, взятую из примеров....

Сборка библиотеки pHash
Всем привет! Возникла необходимость воспользоваться библиотекой pHash . Нужна она для вычисления хэшей изображений, аудио или видео. В...

Сборка статической библиотеки
Есть библиотека из 2 следующих файлов: //mylib.h #ifndef __MYLIB_H__ #define __MYLIB_H__ void hello();

Сборка динамической библиотеки
Пытаюсь собрать динамическую библиотеку для использования её из питона. #include &lt;iostream&gt; #include &lt;string&gt; ...

Сборка ДЛЛ библиотеки
Проблема со сборкой ДЛЛ: В библиотеке должно быть несколько функций, которые необходимо вызывать из C# кода, но проблема в том, что при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru