The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
подключение библиоте к С, !*! Alex, 10-Фев-15, 13:16  [смотреть все]
подскажите пожалуйста как к своей програмке на Си (linux) подключить библиотеку libssh ?

в инструкции написано что ее надо установить. на сколько это необходимо? могу я просто добавить (скопировать) исходники в свою папку-проект и скомпелировать все вмести. подскажите как это обычно делается. мне это надо для переносимости между компьютерами.

  • подключение библиоте к С, !*! fail, 14:33 , 10-Фев-15 (1)
    > подскажите пожалуйста как к своей програмке на Си (linux) подключить библиотеку libssh
    > ?
    > в инструкции написано что ее надо установить. на сколько это необходимо? могу
    > я просто добавить (скопировать) исходники в свою папку-проект и скомпелировать все
    > вмести. подскажите как это обычно делается. мне это надо для переносимости
    > между компьютерами.

    <предсказамус on>
    Сначала надо oпpeделеится - штатными или не штатными ср-вами дистрибутива делаем ?

    Обычно это делается путем установки пакета разработчика соответствующей библиотеки разработчика:
    libssh-(dev,devel) зависит от дистрибутива
    или
    в поисках ништяков-тумаков и прочих приключений копиррованием исходников "в свою папку-проект".
    <предсказамус /on>

    • подключение библиоте к С, !*! Alex, 14:46 , 10-Фев-15 (2) –1
      > <предсказамус on>
      > Сначала надо oпpeделеится - штатными или не штатными ср-вами дистрибутива делаем ?

      имеется ввиду компилятор? да штатный gcc.

      > Обычно это делается путем установки пакета разработчика соответствующей библиотеки разработчика:
      > libssh-(dev,devel) зависит от дистрибутива
      > или

      есть вариант установить из репа эту библиотеку. но я выбрал другой путь, скачал исходники.
      https://red.libssh.org/attachments/download/107/libssh-0.6.4...

      > в поисках ништяков-тумаков и прочих приключений копиррованием исходников "в свою папку-проект".

      ну, если это исходники на С, я же их могу включить в свою программу? вот я это и пытаюсь сделать. прописал:
      #include <libssh/libssh.h>
      не подключается
      в компеляторе использовал ключик -I . тоже не помогло.
      > <предсказамус /on>

      хочу что бы после компеляции в файле было все. без обращений к внешним библиотекам, и как следствие необходимости их установки.

      • подключение библиоте к С, !*! pavard, 15:52 , 10-Фев-15 (3)
        это называется статическая линковка.
        тыб ошибку привел. заинклудить заголовочный файл - это пол дела. нужно еще разрезолвить все используемые символы.

        пс. компИляции

      • подключение библиоте к С, !*! fail, 16:21 , 10-Фев-15 (4)

        > ну, если это исходники на С, я же их могу включить в
        > свою программу? вот я это и пытаюсь сделать. прописал:
        > #include <libssh/libssh.h>

        Потому что это указывается системный путь для include файлов.
        Он может развернется в один из вариантов:
        /usr/include/libssh/libssh.h
        /usr/local/include/libssh/libssh.h
        /opt/include/libssh/libssh.h
        и т.д.

        Для указания локальных ("свою папку-проект"), надо вроде такого
        #include "libssh/libssh.h"

        и не забыть перепроверить систему сборки Automake, Cmake, etc...

        > не подключается
        > в компеляторе использовал ключик -I . тоже не помогло.
        >> <предсказамус /on>
        > хочу что бы после компеляции в файле было все. без обращений к
        > внешним библиотекам, и как следствие необходимости их установки.

        Обновления, патчи security fixes - какой механизм предусмострен,
        как для сторонней библы, так и для программы ?

        • подключение библиоте к С, !*! Alex, 17:11 , 10-Фев-15 (5) –1
          make:
          CC              := gcc
          PROGRAM_NAME    := test
          INCLUDE         := .


          $(PROGRAM_NAME):    clean test.o
                      $(CC) -o $(PROGRAM_NAME) test.o

          test.o:         test.c
                      $(CC) -I$(INCLUDE) -c test.c

          .PHONY: clean

          clean:          
                      rm -f $(PROGRAM_NAME) *.o

          test.c
          #include <libssh/libssh.h>
          #include <stdio.h>
          #include <stdlib.h>

          int main()
          {
              ssh_session my_ssh_session = ssh_new();
              
              if (my_ssh_session == NULL)
              //exit(-1);
               ;
              //...
              
              ssh_free(my_ssh_session);
            

              return 0;
          }
          папка libssh из папки include дистрибутив скопирована в тоже место где make и test.c

          при попытке сборки получаю:
          $ make
          rm -f test *.o
          gcc -I. -lssh -c test.c
          gcc -o test test.o
          test.o: In function `main':
          test.c.text+0xa): undefined reference to `ssh_new'
          test.c.text+0x1a): undefined reference to `ssh_free'
          collect2: ld returned 1 exit status
          make: *** [test] Ошибка 1


          пробовал так же в make файле делать так:
          $(PROGRAM_NAME):    clean test.o
                      $(CC) -o $(PROGRAM_NAME) test.o -lssh

          получил:
          $ make
          rm -f test *.o
          gcc -I. -c test.c
          gcc -o test test.o -lssh
          /usr/bin/ld: cannot find -lssh
          collect2: ld returned 1 exit status
          make: *** [test] Ошибка 1

          • подключение библиоте к С, !*! fail, 17:42 , 10-Фев-15 (6)
            Вижу планы Наполеоновские.

            1.
            > make:

            ...
            > clean:

            ...
            > rm -f $(PROGRAM_NAME) *.o

            Cначала пытаемся динамически подключить библу.


            2.
            > папка libssh из папки include дистрибутив скопирована в тоже место где make
            > и test.c

            Это нафик делать не надо при текущем уровне знаний и вообще.
            Смотрим п.1


            3.Берется и разбирается простой проект или туториал,
            по Automake и прочим тулз и паралельно вариант с CMmake.

            >[оверквотинг удален]
            > make: *** [test] Ошибка 1
            > пробовал так же в make файле делать так:
            > $(PROGRAM_NAME):    clean test.o
            >            
            > $(CC) -o $(PROGRAM_NAME) test.o -lssh
            > получил:
            > $ make
            > rm -f test *.o
            > gcc -I. -c test.c
            > gcc -o test test.o -lssh

            Откуда уверенность в этом флаге (-lssh) - по названию библиотеки (?) - это не так.

            > /usr/bin/ld: cannot find -lssh
            > collect2: ld returned 1 exit status
            > make: *** [test] Ошибка 1

            Повозились уже с Makefile`ом, попробуйте решить проблему c CMake.
            Всегда надо иметь минимум два варианта решения задачи.

            P.S.:
            Поисковики в помощь.

            • подключение библиоте к С, !*! Alex, 10:10 , 11-Фев-15 (8)
              > Вижу планы Наполеоновские.

              да, цель моя такая.. стараюсь..

              > 1.
              >> make:
              > ...
              >> clean:
              > ...
              >> rm -f $(PROGRAM_NAME) *.o
              > Cначала пытаемся динамически подключить библу.

              *.so ?? так ее надо собрать или из репа установить. для чего? для тренировки?


              > 2.
              >> папка libssh из папки include дистрибутив скопирована в тоже место где make
              >> и test.c
              > Это нафик делать не надо при текущем уровне знаний и вообще.
              > Смотрим п.1

              подскажите как это сделать? ответ: это нафиг делать не надо при текущем уровне...
              нормально помогли! ;)
              надо взять на заметку такую рекомендацию. :)
              приходит человек в авто школу учится, а ему: это тебе нафиг не надо! класс! :)

              а что нибуть по конструктивней?

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

              >[оверквотинг удален]
              >> $(PROGRAM_NAME):    clean test.o
              >>
              >> $(CC) -o $(PROGRAM_NAME) test.o -lssh
              >> получил:
              >> $ make
              >> rm -f test *.o
              >> gcc -I. -c test.c
              >> gcc -o test test.o -lssh
              > Откуда уверенность в этом флаге (-lssh) - по названию библиотеки (?) -
              > это не так.

              да, тоже видать такой же дельный совет дали! ;) из серии: это тебе нафиг не надо! делай так!

              >> /usr/bin/ld: cannot find -lssh
              >> collect2: ld returned 1 exit status
              >> make: *** [test] Ошибка 1
              > Повозились уже с Makefile`ом, попробуйте решить проблему c CMake.
              > Всегда надо иметь минимум два варианта решения задачи.

              вожусь... программируюсь... читаюсь... гуглюсь.. ютюбюсь...
              возникают вопросы задаю. получаю ответ: повозись. вожусь. не получается.
              хочу через make. так же как хочу на Си. на шеле уже работает. мне не нравитса как. надо рости. вот новый шаг. иначе наполеоном не стану и в Москву не попаду! ;)

              сори. упрямый..

              stdio.h подключается, а libssh.h нет. в какую сторону возится..?

              > P.S.:
              > Поисковики в помощь.

              • подключение библиоте к С, !*! fail, 11:56 , 11-Фев-15 (9)
                >>надо взять на заметку такую рекомендацию. :)
                >>приходит человек в авто школу учится, а ему: это тебе нафиг не надо! класс! :)

                Если происходит путаница в таких базовых вещах,
                то до автошколы рановато, надо еще повелосипедить, набить шишки мамому, а только потом на
                дорогу выезжать.

                Для начала надо понимать разницу между
                #include <lala.h>
                и
                #include "lala.h"

                >> Откуда уверенность в этом флаге (-lssh) - по названию библиотеки (?) -
                >> это не так.
                >да, тоже видать такой же дельный совет дали! ;) из серии: это тебе нафиг не надо! делай так!

                Пошаговый алгоритм:
                - info,man, функция (смотрим что надо подключить из <*.h> и флаги линковки{статическоц,динамической} )
                - повторить для каждой целевой платформы

                >вожусь... программируюсь... читаюсь... гуглюсь.. ютюбюсь...

                "ютюбюсь..." - а вот это не надо - видите ли ютюбинг и прочий видинг напрочь отбивает абстрактное мышление

                • подключение библиоте к С, !*! Alex, 12:53 , 11-Фев-15 (10)
                  >>>надо взять на заметку такую рекомендацию. :)
                  >>>приходит человек в авто школу учится, а ему: это тебе нафиг не надо! класс! :)
                  > Если происходит путаница в таких базовых вещах,
                  > то до автошколы рановато, надо еще повелосипедить, набить шишки мамому, а только
                  > потом на
                  > дорогу выезжать.

                  так я на дорогу не рвусь! а прошу подсказать как скорость переключается.

                  > Для начала надо понимать разницу между
                  > #include <lala.h>

                  ишет в системной папке которая прописана в системный переменной, имя на память не помню.
                  > и
                  > #include "lala.h"

                  и гдето (возможно в текущей папке), потом в системную.
                  -I(путь) указывает путь где еще искать lala.h

                  >>> Откуда уверенность в этом флаге (-lssh) - по названию библиотеки (?) -
                  >>> это не так.
                  >>да, тоже видать такой же дельный совет дали! ;) из серии: это тебе нафиг не надо! делай так!
                  > Пошаговый алгоритм:
                  > - info,man, функция (смотрим что надо подключить из <*.h> и флаги линковки{статическоц,динамической}

                  статическоц,динамической это имеется ввиду библиотеки? .so .a ?

                  > )
                  > - повторить для каждой целевой платформы
                  >>вожусь... программируюсь... читаюсь... гуглюсь.. ютюбюсь...
                  > "ютюбюсь..." - а вот это не надо - видите ли ютюбинг и
                  > прочий видинг напрочь отбивает абстрактное мышление

                  • подключение библиоте к С, !*! Alex, 14:35 , 11-Фев-15 (11)
                    хочу подключить библиотеку так:
                    https://ru.wikipedia.org/wiki/%D0%97%D0%...

                    пример который пытаюсь релизовать:
                    http://rjaan.narod.ru/docs/libssh/libssh_tutor_guided_tour.html


                    • подключение библиоте к С, !*! fail, 16:26 , 11-Фев-15 (12)
                      > хочу подключить библиотеку так:
                      > https://ru.wikipedia.org/wiki/%D0%97%D0%...
                      > пример который пытаюсь релизовать:
                      > http://rjaan.narod.ru/docs/libssh/libssh_tutor_guided_tour.html

                      Теперь вариант запасной CMake:

                      - курим базовый мануал( опции out os source build, static link etc...)
                      - смотрим туториал по сборке простого бинарника
                      - смотрим пример
                      http://cpansearch.perl.org/src/ALEXBIO/Git-Raw-0.33/deps/lib... и grep`аем: SSH, USE_SSH, переносим в свой проект

                      • подключение библиоте к С, !*! Alex, 17:48 , 11-Фев-15 (13)
                        > Теперь вариант запасной CMake:

                        зачем он мне нужен?
                        потому что других вариантов не осталось?


                        • подключение библиоте к С, !*! nekto, 18:08 , 11-Фев-15 (14)
                          >> Теперь вариант запасной CMake:
                          > зачем он мне нужен?
                          > потому что других вариантов не осталось?

                          Есть вариант вдумчиво покурить Makefile например из ucspi-tcp на предмет подключения библиотек.


                          >>>Сообщение от fail on 10-Фев-15, 17:42
                          >>>Повозились уже с Makefile`ом, попробуйте решить проблему c CMake.
                          >>>Всегда надо иметь минимум два варианта решения задачи.

                          Hе полyчaeтся c make вариант,  возимся C CMake - 30 минут максимум

                          P.S.:
                          Деццкий сатт какой-то.

                        • подключение библиоте к С, !*! Alex_S, 03:36 , 12-Фев-15 (15)
                          >>> Теперь вариант запасной CMake:
                          >> зачем он мне нужен?
                          >> потому что других вариантов не осталось?

                          ребята, вы ему в автошколе вертолет подсовываете
                          нафиг ему смаке и вообще make  файл, пусть сначала просто из командной строки соберет

                          автор, включить хедер - это еще не подключить либу.  это просто объяснить компилятору о намерениях подлинковать ее позже , чисто чтоб не ругался

                          если у тебя собрался исходник test.o и ощибка в линковке - надо подсунуть собственно собранную либу. при статической линковке это будет *.o  или *.a  файл . Название обычно начинается с  lib .

                          если ты поставил свой  ssh  из репозитория  - найди, где этот файл лежит и дай компилятору c полным путем . ну или просто скопируй куда удобно .

                          если из исходников - читай доки к исходникам, как они собираются и какие файлы получаются в результате

                          После этого изучи подключение библиотек через  -l и  -L , будет чуть проще .  

                        • подключение библиоте к С, !*! Alex, 10:02 , 12-Фев-15 (16)
                          > автор, включить хедер - это еще не подключить либу.  это просто
                          > объяснить компилятору о намерениях подлинковать ее позже , чисто чтоб не
                          > ругался

                          да. сейчас раскладываю себе на пальцах. догадываюсь что линкер хочет libssh.o
                          а у меня его нет, и как правильно его получить я не знаю.

                          нашел кучу файлов *.с в этих исходника, но понимаю, что превратить один файлик с нужной мне финкцией в *.o мне не удастся, они скорее всего все переплетины между собой. единственный вариант собирать все!по инструкции!

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

                          поставил. поиск мне говорит:
                          /usr/lib/libssh.so.4
                          /usr/lib/libssh.so.4.2.3
                          /usr/lib/libssh_threads.so.4
                          /usr/lib/libssh_threads.so.4.2.3

                          какие то ссылки создавать надо? типа libssh.so на libssh.so.4  ?
                          как подключить теперь эту библиотеку?
                          в чем отличее ключей -L -I что то я уже запутался...

                        • подключение библиоте к С, !*! fail, 11:39 , 12-Фев-15 (18)
                          >> автор, включить хедер - это еще не подключить либу.  это просто
                          >> объяснить компилятору о намерениях подлинковать ее позже , чисто чтоб не
                          >> ругался
                          > да. сейчас раскладываю себе на пальцах. догадываюсь что линкер хочет libssh.o
                          > а у меня его нет, и как правильно его получить я не
                          > знаю.
                          > ...ставлю из репов
                          > эту библиотеку...

                          Это правильно: все надо делать штатными ср-вами, поменьше самодеятельности(особенно на текущем уровне)

                          > поставил. поиск мне говорит:
                          > /usr/lib/libssh.so.4
                          > /usr/lib/libssh.so.4.2.3
                          > /usr/lib/libssh_threads.so.4
                          > /usr/lib/libssh_threads.so.4.2.3
                          > какие то ссылки создавать надо? типа libssh.so на libssh.so.4  ?
                          > как подключить теперь эту библиотеку?
                          >>>>>>> /usr/lib/libssh.so.4 <<<<<<<

                          скорее всего это /usr/lib/libssh.so.4 будет ссылкой на /usr/lib/libssh.so.4.2.3

                          проверяется: ls -la /usr/lib | grep ssh

                          > в чем отличее ключей -L -I что то я уже запутался...

                          ветка
                          http://www.cyberforum.ru/cpp-beginners/thread47616.html
                          пост из нее
                          http://www.cyberforum.ru/post244536.html
                          "
                          Не то. Добавить путь <directory> к поиску бинарников, библиотек и crt-модулей, а также каталог <directory>/include к поиску инклюдов

                          По опции -I можно задвать несколько путей типа

                          -I/home/trampampam/dir1 -I/home/trampampam/dir2

                          При этом учти, что поиск в этих каталогах идёт раньше, чем поиск в системных. Т.е. если ты файл stdio.h засунешь в один из этих каталогов, подцепится именно он вместо системного
                          "
                          по -L копается самостоятельно !

                          P.S.:
                          Удачи,

                          И после решения варианта с Makefile, сразу же вариант с CMake !!!

                          Сто капель пота на тренировкe стоят дешевле капли крови не тепличных условий.

                        • подключение библиоте к С, !*! fail, 10:48 , 12-Фев-15 (17)
                          >>>> Теперь вариант запасной CMake:
                          >>> зачем он мне нужен?
                          >>> потому что других вариантов не осталось?
                          > ребята, вы ему в автошколе вертолет подсовываете
                          > нафиг ему смаке и вообще make  файл, пусть сначала просто из
                          > командной строки соберет

                          Лучше "полчаса" потерять, а потом везде за 5 минут долетать(докумекать).

                          Крылья, лапы, хвост (c)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру