использование ncurses без его установки - PullRequest
0 голосов
/ 20 февраля 2020

Я работаю над проектом, который использует ncurses. Мне интересно, есть ли способ использовать эту библиотеку, не устанавливая ее на компьютере? Я имею в виду, что вместо установки, есть ли способ иметь .h файлы, скомпилировать их в make-файл и использовать их?
Спасибо заранее за ваш ответ

1 Ответ

3 голосов
/ 20 февраля 2020

Кажется, вам нужно собрать его самостоятельно, поэтому вот как это можно сделать:

  • Создайте каталог, в котором вы выполняете локальную установку внешних пакетов, которые вы загружаете, собираете и устанавливаете. Они часто по умолчанию /usr/local, но я предполагаю, что у вас нет прав администратора, поэтому вы можете вместо этого создать local в своем домашнем каталоге.
    cd ~
    mkdir local
    
  • Если раньше этого не было, вы можете создать каталог для загружаемых репозиториев:
    mkdir ~/repos
    cd ~/repos
    
  • Клон ncurses
    git clone https://github.com/mirror/ncurses.git
    cd ncurses
    
  • Настроить ncurses
    Это настраивает его для установки в только что созданный каталог local с поддержкой широких символов (UTF-8) и поддержкой потоков. Вы можете поэкспериментировать с другими вариантами (но учтите, что это повлияет на именование каталогов и библиотек). Он также настраивает ncurses для создания stati c библиотек (по умолчанию).
    ./configure --prefix ~/local --enable-widec --with-pthread
    
  • Сборка и установка:

    make -j
    make -j install
    

    Ваш каталог ~/local теперь должен выглядеть следующим образом:

    bin  include  lib  share
    
  • При компиляции собственных программ добавьте
    -I ~/local/include -I ~/local/include/ncursestw -L ~/local/lib
    в командную строку. Обратите внимание на t (для потоков ) и w (для wide ) в каталоге.

    При связывании необходимо связать с ncursestw, dl и pthread.

    Пример:

    g++ -I ~/local/include -I ~/local/include/ncursestw -L ~/local/lib \ 
                           -o prog prog.cpp -lncursestw -ldl -pthread
    

    Обратите внимание, что связывание с библиотеку pthread лучше всего делать с -pthread, а не -lpthread (*)

...