- подключение библиоте к С, 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) *.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
- подключение библиоте к С, 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)
- подключение библиоте к С, fail, 16:26 , 11-Фев-15 (12)
- подключение библиоте к С, 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)
|