Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Jul 17, 2019 2:19 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 18 posts ]  Go to page 1 2 Next
Author Message
 Post subject: Вопрос о C
PostPosted: Fri Jun 25, 2010 1:30 pm 
Offline

Joined: Fri Jun 25, 2010 1:16 pm
Posts: 2
Здравствуйте. Я тут новичок, решил посмотреть в каком состоянии ваша ОС. Впечатления в целом положительные. Интересно, можно ли туда перенести программы на C?

viewtopic.php?f=9&t=480
http://diamond.kolibrios.org/

Смотрел по ссылкам выше. То, что там предлагают использовать (menuetlibc) содержит неправильный Makefile (я пробовал BSD make и GNU make - результат 1 - Line 4: missing dependency operator). Собрать не получается. Есть ли пофиксенная версия?

И ещё, если я сам пофиксю, и скомпилирую какую-нибудь прогу с помощью gcc и этой библиотеки, то как сделать его исполняемым в KolibriOS? В плане, понимает ли она ELF формат?


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Fri Jun 25, 2010 1:52 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Всё там собирается GNU-тым make. Если дефолтный make - BSDшный, позаботьтесь о замене команды make на путь к правильному бинарнику везде. Переменная окружения MENUETDEV установлена?
Колибри не понимает ELF-формат, одной из целей системы сборки в menuetlibc является сборка бинарников в нужном формате.


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Fri Jun 25, 2010 2:10 pm 
Offline

Joined: Fri Jun 25, 2010 1:16 pm
Posts: 2
diamond wrote:
Переменная окружения MENUETDEV установлена?

да
diamond wrote:
Всё там собирается GNU-тым make. Если дефолтный make - BSDшный, позаботьтесь о замене команды make на путь к правильному бинарнику везде.

Достаточно использовать gmake

diamond wrote:
Колибри не понимает ELF-формат, одной из целей системы сборки в menuetlibc является сборка бинарников в нужном формате.

Ясно, спасибо.

diamond wrote:
Всё там собирается GNU-тым make.

Таки нет) Ну ладно, я вручную соберу)


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Fri Jun 25, 2010 2:40 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Quote:
Достаточно использовать gmake

Вы Makefile глазами смотрели? Что он внутри себя make (а вовсе не gmake) вызывает для вложенных папок, видели?


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Sat Sep 28, 2013 10:37 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1150
Какую библиотеку лучше использовать? Menuetlibc или newlib?

_________________
я лишь учусь


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Sat Sep 28, 2013 11:29 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
punk_joker
В новой newlib нативная поддержка PE DLL с автоматической линковкой.
Но привязка жесткая к mingw32.


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Fri Feb 27, 2015 6:36 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5053
Описание к сисфункции:
Code:
Структура блока данных входа каталога (БДВК):
  * +0: dword: атрибуты файла:
    * бит 0 (маска 1): файл только для чтения
    * бит 1 (маска 2): файл является скрытым
    * бит 2 (маска 4): файл является системным
    * бит 3 (маска 8): это не файл, а метка тома
      (на заданном разделе встречается не более одного раза и
      только в корневой папке)
    * бит 4 (маска 0x10): это папка
    * бит 5 (маска 0x20): файл не архивировался - многие программы
      архивации имеют опцию, по которой архивируются только файлы
      с установленным этим битом, после чего этот бит сбрасывается -
      это может быть полезно для автоматического создания
      backup-архивов, ибо при записи бит обычно устанавливается
      (не в Kolibri, правда)


раньше я использовал dword и проверял его биты, сейчас я решил разложить его на биты в самой структре;
Code:
dword readonly:1, hidden:1, system:1, volume_label:1, isfolder:1, notarchived:1;

Почему-то не работает, что я делаю не так?

_________________
Через тернии к звездам


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Fri Feb 27, 2015 7:59 pm 
Offline

Joined: Sun Oct 02, 2011 4:48 pm
Posts: 43
Leency wrote:
Code:
dword readonly:1, hidden:1, system:1, volume_label:1, isfolder:1, notarchived:1;

Почему-то не работает, что я делаю не так?


Может в этом дело:
Quote:
"Битовые поля имеют тип unsigned int, так как имеют длину один бит. Если длина поля больше одного бита, то поле может иметь и знаковый целый тип.

http://learnc.info/c/unions_and_bitfields.html"


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Fri Feb 27, 2015 8:27 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5053
Не, я перечитал документацию к С-- и нашёл проблему!!! Спасибо Диме за наводку!
Дело в выравнивании http://c--sphinx.narod.ru/c--doc.htm#8.1.8
Правильно так:
Code:
dword   readonly:1, hidden:1, system:1, volume_label:1, isfolder:1, notarchived:1, :0;

_________________
Через тернии к звездам


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Tue Mar 03, 2015 2:13 am 
Offline
User avatar

Joined: Sat Jul 05, 2014 11:15 am
Posts: 88
чисто мое имхо, но я бы не использовал битовые поля в этой ситуации.
не сказал бы что я крутой спец, но толку тут я особо не вижу:
- более чем уверен что в памяти оно все-равно будет храниться как dword
- если не будет храниться как dword, процессор потратит больше времени на переваривание битового поля, если оно не кратно размеру слова + выравнивание
- переносимость в платформах битовых полей всегда хуже
- [х] да и не нравится оно мне, как-то оно не по сишному выглядит


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Wed Apr 29, 2015 9:52 am 
Offline
User avatar

Joined: Tue Apr 28, 2015 11:01 pm
Posts: 11
Я правильно понял, относительные пути к файлам в newlib не поддерживаются? Есть какой-нить костыль для обхода?
Ну, или, есть ли какой-нибудь способ узнать путь к программе, которая запущена? getwd не работает. Пишет undefined reference to getwd.

menuet-libc умеет то, что я хочу?

Заранее спасибо.


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Wed Apr 29, 2015 11:21 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Относительные пути поддерживаются. Проблема в том, что не все файловые менеджеры меняют текущий каталог при перемещении по дереву каталогов. Shell меняет.
Каталог из которого запущена программа определяется традиционно через argv[0]
Текущий рабочий каталог
Code:
char *getcwd(char *buf, size_t size)
{
    int bsize;
    __asm__ __volatile__(
    "int $0x40"
    :"=a"(bsize)
    :"a"(30),"b"(2),"c"(buf), "d"(size)
    :"memory");

    return buf;
};


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Thu Sep 03, 2015 8:39 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1150
Что лучше использовать для портирования новых программ на С? Menuetlibc или Newlib? И можно ли обойтись вообще без них? Хотелось бы просто собрать avra под Колибри, но требование обязательного наличия newlib как то смущает.

_________________
я лишь учусь


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Thu Sep 03, 2015 8:53 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Что такое avra ?


Top
   
 Post subject: Re: Вопрос о C
PostPosted: Thu Sep 03, 2015 9:03 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1071
http://avra.sourceforge.net/README.html я полагаю


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 18 posts ]  Go to page 1 2 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited