The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"подключение библиоте к С"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"подключение библиоте к С"  –1 +/
Сообщение от Alex (??) on 10-Фев-15, 13:16 
подскажите пожалуйста как к своей програмке на Си (linux) подключить библиотеку libssh ?

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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

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

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

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

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

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "подключение библиоте к С"  +/
Сообщение от fail on 10-Фев-15, 16:21 

> ну, если это исходники на С, я же их могу включить в
> свою программу? вот я это и пытаюсь сделать. прописал:
> #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 - какой механизм предусмострен,
как для сторонней библы, так и для программы ?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "подключение библиоте к С"  –1 +/
Сообщение от Alex (??) on 10-Фев-15, 17:11 
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

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "подключение библиоте к С"  +/
Сообщение от fail on 10-Фев-15, 17:42 
Вижу планы Наполеоновские.

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.:
Поисковики в помощь.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "подключение библиоте к С"  +/
Сообщение от Alex (??) on 11-Фев-15, 10:10 
> Вижу планы Наполеоновские.

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

> 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.:
> Поисковики в помощь.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

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

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

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

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

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

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

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

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

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

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

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

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

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

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

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

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

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

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

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


Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "подключение библиоте к С"  +/
Сообщение от fail on 11-Фев-15, 16:26 
> хочу подключить библиотеку так:
> 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, переносим в свой проект

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "подключение библиоте к С"  +/
Сообщение от Alex (??) on 11-Фев-15, 17:48 
> Теперь вариант запасной CMake:

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


Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "подключение библиоте к С"  +/
Сообщение от nekto on 11-Фев-15, 18:08 
>> Теперь вариант запасной CMake:
> зачем он мне нужен?
> потому что других вариантов не осталось?

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


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

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

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

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

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

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

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

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

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

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

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

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

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

да. сейчас раскладываю себе на пальцах. догадываюсь что линкер хочет 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 что то я уже запутался...

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "подключение библиоте к С"  +/
Сообщение от fail on 12-Фев-15, 11:39 
>> автор, включить хедер - это еще не подключить либу.  это просто
>> объяснить компилятору о намерениях подлинковать ее позже , чисто чтоб не
>> ругался
> да. сейчас раскладываю себе на пальцах. догадываюсь что линкер хочет 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 стоят дешевле капли крови не тепличных условий.

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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