реклама на сайте
подробности

 
 
10 страниц V  « < 7 8 9 10 >  
Reply to this topicStart new topic
> Linux начинающему
berkl
сообщение Nov 17 2013, 08:10
Сообщение #121


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115




Забыл отписаться.

Скомпилировал её, не мытьем, так катаньем. В дистрибутиве виджета есть 2 папки с исходниками. Одна (gtk) собственно с исходниками библиотеки, вторая (glade) - с исходниками привязки библиотеки к Glade. Глейдом я не пользуюсь (пока во всяком случае), поэтому взял *.с и *.h из папки gtk и скомпилировал их своим makefile (точнее своим cmake) в динамическую библиотеку. Проверил, всё работает, а на glade - пофиг.
Тем временем, наткнулся на другой Gtk библиотеку для отображения графиков http://sourceforge.net/projects/giw/. Тут поинтереснее уже. Плюсом к графикам есть стрелочные, столбиковые индикаторы. прикольно, надо будет попробовать. Но это так, к слову.

Попутно хочу вот еще что спросить. Как, в общих чертах, переносится программа на целевую машину. Допустим, программа написана для АРМ. Программа использует дин. библиотеки. Как быть с этими библиотеками ?

1. Копировать с инструменталки готовые (кросскомпилированные) библиотеки в файловую систему линукса АРМа ?
или
2. Их надо прям на самой плате компилировать, нативным, АРМовским gcc ?
или
3. Или как ?

Если первый вариант, то как это правильно делать ? Ну не руками же их папок выдергивать .so файлы и перетаскивать ?
Если второй вариант, то не будет ли проблем с совместной работой программы, собранной кросскомпилятором инструменталки и библиотеками, собранными компилятором Линукса целевой платы ?

Еще вопросик. Дистрибутив Линукса АРМ платы собирается на инструменталке тем же компилятором, которым в последствие будут компилироваться программы пользователя или нет?

Спасибо!
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 18 2013, 12:51
Сообщение #122


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(berkl @ Nov 17 2013, 12:10) *
Забыл отписаться.

Скомпилировал её, не мытьем, так катаньем. В дистрибутиве виджета есть 2 папки с исходниками. Одна (gtk) собственно с исходниками библиотеки, вторая (glade) - с исходниками привязки библиотеки к Glade. Глейдом я не пользуюсь (пока во всяком случае), поэтому взял *.с и *.h из папки gtk и скомпилировал их своим makefile (точнее своим cmake) в динамическую библиотеку. Проверил, всё работает, а на glade - пофиг.
Тем временем, наткнулся на другой Gtk библиотеку для отображения графиков http://sourceforge.net/projects/giw/. Тут поинтереснее уже. Плюсом к графикам есть стрелочные, столбиковые индикаторы. прикольно, надо будет попробовать. Но это так, к слову.

Попутно хочу вот еще что спросить. Как, в общих чертах, переносится программа на целевую машину. Допустим, программа написана для АРМ. Программа использует дин. библиотеки. Как быть с этими библиотеками ?

1. Копировать с инструменталки готовые (кросскомпилированные) библиотеки в файловую систему линукса АРМа ?
или
2. Их надо прям на самой плате компилировать, нативным, АРМовским gcc ?
или
3. Или как ?

Если первый вариант, то как это правильно делать ? Ну не руками же их папок выдергивать .so файлы и перетаскивать ?
Если второй вариант, то не будет ли проблем с совместной работой программы, собранной кросскомпилятором инструменталки и библиотеками, собранными компилятором Линукса целевой платы ?

Еще вопросик. Дистрибутив Линукса АРМ платы собирается на инструменталке тем же компилятором, которым в последствие будут компилироваться программы пользователя или нет?

Спасибо!


Я пользуюсь первым методом. Скомпилировав и установив в sandbox я потом просто копирую все в корень моей target машины.
На второй вопрос ответ такой. Я так и делаю, но не уверен, что не может быть нюансов.

Go to the top of the page
 
+Quote Post
berkl
сообщение Nov 19 2013, 06:36
Сообщение #123


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115



Цитата(Tarbal @ Nov 18 2013, 16:51) *
Я пользуюсь первым методом. Скомпилировав и установив в я потом просто копирую все в корень моей target машины.
На второй вопрос ответ такой. Я так и делаю, но не уверен, что не может быть нюансов.


Спасибо

А если Вы установили с десяток всяких библиотек на свою плату и вообще настроили АРМовый Линукс под себя. Можно ли сохранить его в таком состоянии, чтобы потом на вторую плату не устанавливать опять всё по шаг за шагом, а разом прошить всё в NAND или SD карточку?
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 19 2013, 12:31
Сообщение #124


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(berkl @ Nov 19 2013, 09:36) *
Спасибо

А если Вы установили с десяток всяких библиотек на свою плату и вообще настроили АРМовый Линукс под себя. Можно ли сохранить его в таком состоянии, чтобы потом на вторую плату не устанавливать опять всё по шаг за шагом, а разом прошить всё в NAND или SD карточку?


Скопируйте образ диска и потом записывайте ее. Копирование образа сопряжено с использованием команды dd, которая не прощает ошибок.
Можно скопировать только файловую систему.

1. создаем две директории:
mkdir mnt; mkdir rootfs

2. Монтируем партишн в которой наша рут файловая система (/dev/sdc1 может быть другая буква вместо с и другая цифра. Вы сами найдите какая партишн появляется в вашей системе. Если не знаете как, то я расскажу.)
sudo mount /dev/sdc1 mnt

3. Копируем с приведенными ключами команды.
sudo scp -arp mnt/* rootfs
sync
4. Размонтируем и убираем диск.
sudo umount /dev/sdc1

5. Вставляем диск, с созданной и отформатированной партишн. Монтируем партишн
sudo mount /dev/sdc1 mnt

Копируем на диск.
sudo scp -arp rootfs/* mnt
sync
sudo umount /dev/sdc1

Вынимаем готовый диск.
На самом деле иногда бывает надо записать еще кернел и бут лоадер. Но это уже другой вопрос.


После команды sync компьютер может надолго задуматься. Это нормально. надо дождаться, окончания команды.

Это было для SD карточки. Если же память впаяна и нет возможности стартануть систему с внешней SD карточки или USB диска, то надо создать копию вашей файловой системы на каком-нибудь компьютере, а бут лоадер сконфигурировать (точнее командную строку кернела), чтобы при старте кернел монтировал эту удаленную рут файловую систему по NFS.
Установите свои библиотеки уже после этого. Кстати зачастую сорсы библиотек не нужны. Возможно неплохо будет удалить их перед копированием.
Go to the top of the page
 
+Quote Post
berkl
сообщение Jan 6 2014, 16:06
Сообщение #125


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115



Приветствую,

Вопрос такой. Можно ли собрать проект на большом Линуксе с объектниками библиотек, скаченных с Линукса целевой платы? Прям взять по SSH скачать нужные для сборки либы и подсунуть их кросскомпилятору rolleyes.gif

К примеру, есть у меня в программе что-нибудь графическое на "иксах"
Код
....display = XOpenDisplay(0);.....
Я выкачиваю из борды Xlib.so и подсовываю её кросстулчейну инструменталки. Будет такое работать sm.gif ?


Спасибо!
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jan 6 2014, 19:15
Сообщение #126


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата
Динамическая библиотека - это созданная специальным образом библиотека, которая присоединяется к результирующей программе в два этапа. Первый этап, это естественно этап компиляции. На этом этапе линковщик встраивает в программу описания требуемых функций и переменных, которые присутствуют в библиотеке. Сами объектные файлы из библиотеки не присоединяются к программе. Присоединение этих объектных файлов(кодов функций) осуществляет системный динамический загрузчик во время запуска программы. Загрузчик проверяет все библиотеки прилинкованные с программе на наличие требуемых объектных файлов, затем загружает их в память и присоединяет их в копии запущенной программы, находящейся в памяти.

В Linux, обычно, динамические библиотеки имеют расширение ".so".

http://www.firststeps.ru/linux/r.php?8
Go to the top of the page
 
+Quote Post
berkl
сообщение Jan 6 2014, 21:07
Сообщение #127


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115



Цитата(Lagman @ Jan 6 2014, 23:15) *


Извините, я вас не понял wacko.gif . По существу вопроса выскажитесь плиз
Go to the top of the page
 
+Quote Post
Canis Dirus
сообщение Jan 7 2014, 11:03
Сообщение #128


Частый гость
**

Группа: Участник
Сообщений: 136
Регистрация: 7-01-09
Из: Нефтеюганск
Пользователь №: 42 967



Цитата(berkl @ Jan 6 2014, 22:06) *
К примеру, есть у меня в программе что-нибудь графическое на "иксах"
Код
....display = XOpenDisplay(0);.....
Я выкачиваю из борды Xlib.so и подсовываю её кросстулчейну инструменталки. Будет такое работать sm.gif ?

Если в принципе — да (вот пример подобного для gcc). А вот в корпусе вам ведь ещё потребуются заголовочные файлы от этой библиотеки.


--------------------
С уважением, Алексей Шапошников.
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jan 7 2014, 11:50
Сообщение #129


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(berkl @ Jan 7 2014, 01:07) *
Извините, я вас не понял wacko.gif . По существу вопроса выскажитесь плиз

Я дал направление, что есть два вида библиотек, в вашем случае это динамическая библиотека, и дал ссылку как надо открывать и работать с этим видом библиотек. Далее гуглояндекс в помощь.
IMHO для кросскомпиляции эта .so вам не нужна, нужен заголовочный файл от этой библиотеки и правильно ее открыть и работать.
http://www.ibm.com/developerworks/ru/libra...amic-libraries/
Go to the top of the page
 
+Quote Post
berkl
сообщение Jan 7 2014, 18:55
Сообщение #130


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115



Цитата(Lagman @ Jan 7 2014, 15:50) *
Я дал направление, что есть два вида библиотек, в вашем случае это динамическая библиотека, и дал ссылку как надо открывать и работать с этим видом библиотек. Далее гуглояндекс в помощь.
IMHO для кросскомпиляции эта .so вам не нужна, нужен заголовочный файл от этой библиотеки и правильно ее открыть и работать.
http://www.ibm.com/developerworks/ru/libra...amic-libraries/


Всё, я понял. Динамическую либу можно подключать к проекту как обычным способом (линковать make'ом, например), так и прям внутри кода своей программы (с помощью линуксовой либы dl ). В этом случае, для успешной компиляции программы, подключаемая библиотека живьем действительно не нужна. Да и заголовочник либы думаю нужен только если в нем дефайны какие-то есть. Ловко.
Для кросскомпиляции, наверное надо скопировать на инструменталку с целевой платы файлы dl.so и dlfcn.h, в папку проекта и указать мэйку путь к ним. Иначе под arm не соберется. Нашел, dl есть прямо в кросс тулчейне, можно (и наверно правильно) использовать её. Может как то поизящней можно, незнаю.

Вещь,чо!

Спасибо!

Сообщение отредактировал berkl - Jan 7 2014, 19:27
Go to the top of the page
 
+Quote Post
berkl
сообщение Jan 10 2014, 11:02
Сообщение #131


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115



Для использования
Код
  void *dlopen( const char *file, int mode );
надо знать имя файла библиотеки. Как его можно узнать? В руководстве на библиотеку не всегда его можно найти, как тут, к примеру http://www.opennet.ru/docs/RUS/gtk-reference/ix01.html (будем считать что библиотека хоть и нестандартная, но идет предустановленной в дистрибутиве Линукса)

Где брать имена файлов системных библиотек тоже не ясно. Например, как узнать в каком хххх.so находится функция
Код
sin(double x);
?

Спасибо.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jan 10 2014, 11:10
Сообщение #132


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(berkl @ Jan 10 2014, 15:02) *
Например, как узнать в каком хххх.so находится функция
Код
sin(double x);
?
Читайте доки, они рулез.
Код
$ man sin

Код
SIN(3)                                        Linux Programmer's Manual

NAME
       sin, sinf, sinl - sine function

SYNOPSIS
       #include <math.h>

       double sin(double x);
       float sinf(float x);
       long double sinl(long double x);

       Link with -lm.
Go to the top of the page
 
+Quote Post
berkl
сообщение Jan 10 2014, 11:48
Сообщение #133


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115



Цитата(andrew_b @ Jan 10 2014, 15:10) *
Читайте доки, они рулез.
Код
$ man sin

Код
SIN(3)                                        Linux Programmer's Manual

NAME
       sin, sinf, sinl - sine function

SYNOPSIS
       #include <math.h>

       double sin(double x);
       float sinf(float x);
       long double sinl(long double x);

       Link with -lm.



Не, не. Мне не надо имя либы которое используется при линковке( -lm ) Мне надо узнать что double sin(double x); в libm.so находится

Вот тут поднимался вопрос этот http://archlinux.org.ru/forum/topic/3665/. Предлагается использовать следующее

Цитата
# Ищем имя либы, по ф-ции gtk_init
nm -DA *.so* | grep -w gtk_init


У меня это не работает, выдает обшибку "nm: '*.so*': Нет такого файла"

Сообщение отредактировал berkl - Jan 10 2014, 11:56
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Jan 10 2014, 12:24
Сообщение #134


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(berkl @ Jan 10 2014, 15:48) *
У меня это не работает, выдает обшибку "nm: '*.so*': Нет такого файла"

А Вы эту команду запускаете в том каталоге, где лежат Вас интересующие библиотеки? В /usr/lib все сработает, а в /home/youname - нет при отсутствии файлов *.so*. Насколько я понимаю, это утилита не использует системные переменные для поиска файлов библиотек.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Canis Dirus
сообщение Jan 10 2014, 13:43
Сообщение #135


Частый гость
**

Группа: Участник
Сообщений: 136
Регистрация: 7-01-09
Из: Нефтеюганск
Пользователь №: 42 967



Цитата(berkl @ Jan 10 2014, 17:48) *
У меня это не работает, выдает обшибку "nm: '*.so*': Нет такого файла"

man find:
CODE
➜ ~ find /usr/lib -name '*gtk*so*' -type f -exec nm -DA '{}' \; |grep "gtk_init"
/usr/lib/python2.6/dist-packages/gtk-2.0/gtk/_gtk.so: U gtk_init_check
/usr/lib/libreoffice/program/libvclplug_gtk3lo.so: U gtk_init
/usr/lib/libreoffice/program/libvclplug_gtk3lo.so: U gtk_init_check
/usr/lib/libreoffice/program/libvclplug_gtklo.so: U gtk_init_check
/usr/lib/alsaplayer/interface/libgtk2_interface.so: U gtk_init
/usr/lib/alsaplayer/interface/libgtk2_interface.so:000000000003cf30 T _Z18interface_gtk_initv
/usr/lib/x86_64-linux-gnu/libgtk-3.so.0.800.6:000000000018a350 T gtk_init
/usr/lib/x86_64-linux-gnu/libgtk-3.so.0.800.6:000000000018a320 T gtk_init_check
/usr/lib/x86_64-linux-gnu/libgtk-3.so.0.800.6:000000000018a150 T gtk_init_with_args
/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.22:000000000012a190 T gtk_init
/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.22:000000000012a740 T gtk_init_add
/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.22:000000000012a160 T gtk_init_check
/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.22:0000000000129fa0 T gtk_init_with_args
/usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-2.8.so.0.8.0: U gtk_init_check
/usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0: U gtk_init_check
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/_gtk.so: U gtk_init_check

(В данном случае она ищет в директории /usr/lib все библиотечные файлы хоть как-то относящиеся к gtk и если находит, то запускает nm с соответствующим аргументом. Результат перенаправляется на вход команды grep).


--------------------
С уважением, Алексей Шапошников.
Go to the top of the page
 
+Quote Post

10 страниц V  « < 7 8 9 10 >
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01506 секунд с 7
ELECTRONIX ©2004-2016