подскажите пожалуйста как к своей програмке на Си (linux) подключить библиотеку libssh ?в инструкции написано что ее надо установить. на сколько это необходимо? могу я просто добавить (скопировать) исходники в свою папку-проект и скомпелировать все вмести. подскажите как это обычно делается. мне это надо для переносимости между компьютерами.
> подскажите пожалуйста как к своей програмке на Си (linux) подключить библиотеку libssh
> ?
> в инструкции написано что ее надо установить. на сколько это необходимо? могу
> я просто добавить (скопировать) исходники в свою папку-проект и скомпелировать все
> вмести. подскажите как это обычно делается. мне это надо для переносимости
> между компьютерами.<предсказамус on>
Сначала надо oпpeделеится - штатными или не штатными ср-вами дистрибутива делаем ?Обычно это делается путем установки пакета разработчика соответствующей библиотеки разработчика:
libssh-(dev,devel) зависит от дистрибутива
или
в поисках ништяков-тумаков и прочих приключений копиррованием исходников "в свою папку-проект".
<предсказамус /on>
> <предсказамус on>
> Сначала надо oпpeделеится - штатными или не штатными ср-вами дистрибутива делаем ?имеется ввиду компилятор? да штатный gcc.
> Обычно это делается путем установки пакета разработчика соответствующей библиотеки разработчика:
> libssh-(dev,devel) зависит от дистрибутива
> илиесть вариант установить из репа эту библиотеку. но я выбрал другой путь, скачал исходники.
https://red.libssh.org/attachments/download/107/libssh-0.6.4...> в поисках ништяков-тумаков и прочих приключений копиррованием исходников "в свою папку-проект".
ну, если это исходники на С, я же их могу включить в свою программу? вот я это и пытаюсь сделать. прописал:
#include <libssh/libssh.h>
не подключается
в компеляторе использовал ключик -I . тоже не помогло.
> <предсказамус /on>хочу что бы после компеляции в файле было все. без обращений к внешним библиотекам, и как следствие необходимости их установки.
это называется статическая линковка.
тыб ошибку привел. заинклудить заголовочный файл - это пол дела. нужно еще разрезолвить все используемые символы.пс. компИляции
> ну, если это исходники на С, я же их могу включить в
> свою программу? вот я это и пытаюсь сделать. прописал:
> #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 - какой механизм предусмострен,
как для сторонней библы, так и для программы ?
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) *.otest.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
Вижу планы Наполеоновские.1.
> make:...
> clean:...
> rm -f $(PROGRAM_NAME) *.oCначала пытаемся динамически подключить библу.
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.:
Поисковики в помощь.
> Вижу планы Наполеоновские.да, цель моя такая.. стараюсь..
> 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.:
> Поисковики в помощь.
>>надо взять на заметку такую рекомендацию. :)
>>приходит человек в авто школу учится, а ему: это тебе нафиг не надо! класс! :)Если происходит путаница в таких базовых вещах,
то до автошколы рановато, надо еще повелосипедить, набить шишки мамому, а только потом на
дорогу выезжать.Для начала надо понимать разницу между
#include <lala.h>
и
#include "lala.h">> Откуда уверенность в этом флаге (-lssh) - по названию библиотеки (?) -
>> это не так.
>да, тоже видать такой же дельный совет дали! ;) из серии: это тебе нафиг не надо! делай так!Пошаговый алгоритм:
- info,man, функция (смотрим что надо подключить из <*.h> и флаги линковки{статическоц,динамической} )
- повторить для каждой целевой платформы>вожусь... программируюсь... читаюсь... гуглюсь.. ютюбюсь...
"ютюбюсь..." - а вот это не надо - видите ли ютюбинг и прочий видинг напрочь отбивает абстрактное мышление
>>>надо взять на заметку такую рекомендацию. :)
>>>приходит человек в авто школу учится, а ему: это тебе нафиг не надо! класс! :)
> Если происходит путаница в таких базовых вещах,
> то до автошколы рановато, надо еще повелосипедить, набить шишки мамому, а только
> потом на
> дорогу выезжать.так я на дорогу не рвусь! а прошу подсказать как скорость переключается.
> Для начала надо понимать разницу между
> #include <lala.h>ишет в системной папке которая прописана в системный переменной, имя на память не помню.
> и
> #include "lala.h"и гдето (возможно в текущей папке), потом в системную.
-I(путь) указывает путь где еще искать lala.h>>> Откуда уверенность в этом флаге (-lssh) - по названию библиотеки (?) -
>>> это не так.
>>да, тоже видать такой же дельный совет дали! ;) из серии: это тебе нафиг не надо! делай так!
> Пошаговый алгоритм:
> - info,man, функция (смотрим что надо подключить из <*.h> и флаги линковки{статическоц,динамической}статическоц,динамической это имеется ввиду библиотеки? .so .a ?
> )
> - повторить для каждой целевой платформы
>>вожусь... программируюсь... читаюсь... гуглюсь.. ютюбюсь...
> "ютюбюсь..." - а вот это не надо - видите ли ютюбинг и
> прочий видинг напрочь отбивает абстрактное мышление
хочу подключить библиотеку так:
https://ru.wikipedia.org/wiki/%D0%97%D0%...пример который пытаюсь релизовать:
http://rjaan.narod.ru/docs/libssh/libssh_tutor_guided_tour.html
> хочу подключить библиотеку так:
> 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, переносим в свой проект
> Теперь вариант запасной CMake:зачем он мне нужен?
потому что других вариантов не осталось?
>> Теперь вариант запасной CMake:
> зачем он мне нужен?
> потому что других вариантов не осталось?Есть вариант вдумчиво покурить Makefile например из ucspi-tcp на предмет подключения библиотек.
>>>Сообщение от fail on 10-Фев-15, 17:42
>>>Повозились уже с Makefile`ом, попробуйте решить проблему c CMake.
>>>Всегда надо иметь минимум два варианта решения задачи.Hе полyчaeтся c make вариант, возимся C CMake - 30 минут максимум
P.S.:
Деццкий сатт какой-то.
>>> Теперь вариант запасной CMake:
>> зачем он мне нужен?
>> потому что других вариантов не осталось?ребята, вы ему в автошколе вертолет подсовываете
нафиг ему смаке и вообще make файл, пусть сначала просто из командной строки соберетавтор, включить хедер - это еще не подключить либу. это просто объяснить компилятору о намерениях подлинковать ее позже , чисто чтоб не ругался
если у тебя собрался исходник test.o и ощибка в линковке - надо подсунуть собственно собранную либу. при статической линковке это будет *.o или *.a файл . Название обычно начинается с lib .
если ты поставил свой ssh из репозитория - найди, где этот файл лежит и дай компилятору c полным путем . ну или просто скопируй куда удобно .
если из исходников - читай доки к исходникам, как они собираются и какие файлы получаются в результате
После этого изучи подключение библиотек через -l и -L , будет чуть проще .
> автор, включить хедер - это еще не подключить либу. это просто
> объяснить компилятору о намерениях подлинковать ее позже , чисто чтоб не
> ругалсяда. сейчас раскладываю себе на пальцах. догадываюсь что линкер хочет 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 что то я уже запутался...
>> автор, включить хедер - это еще не подключить либу. это просто
>> объяснить компилятору о намерениях подлинковать ее позже , чисто чтоб не
>> ругался
> да. сейчас раскладываю себе на пальцах. догадываюсь что линкер хочет 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 стоят дешевле капли крови не тепличных условий.
>>>> Теперь вариант запасной CMake:
>>> зачем он мне нужен?
>>> потому что других вариантов не осталось?
> ребята, вы ему в автошколе вертолет подсовываете
> нафиг ему смаке и вообще make файл, пусть сначала просто из
> командной строки соберетЛучше "полчаса" потерять, а потом везде за 5 минут долетать(докумекать).
Крылья, лапы, хвост (c)