crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> из LInux в Win
TiiL
  опции профиля:
сообщение 7.7.2011, 8:16
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


Переделываю программу написанную под LInux в Win, запоролся на таком моменте:


#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <qapplication.h>
#include <qmessagebox.h>
#include <qlineedit.h>
#include <qstring.h>

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sched.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>


не работает :

// Попытаемся создать FIFO в текущей директории
if(mknod(nameOUT, S_IFIFO | 0666, 0) < 0)
{
// Если создать FIFO не удалось, печатаем об этом сообщение и прекращаем работу
perror("BLOCK can\'t create FIFO OUT");
exit(-1);
}

ошибка:

block.cpp:167: error: 'mknod' was not declared in this scope




Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 7.7.2011, 13:46
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


А где собственно этот самый mknod объявляется? + if(mknod(nameOUT, S_IFIFO | 0666, 0) < 0) жирным выделены права на создаваемый объект в файловой системе. А точнее всем на чтение\изменения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 7.7.2011, 14:06
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


silver47, на ваш вопрос я не знаю ответа где он объявляеться, но через поиск mknod не находит в в файлах*.h .

По-гуглив, я понял что mknod это чисто Unix функция, можеть быть есть таже функция, но под Window? поправте, если я ошибаюсь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 7.7.2011, 16:20
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


и еще одна проблемка:

есть код большой код.

в начале кода:

#include <stdio.h>

в конце когда:

_fcloseall();

при сборке выдаются ошибки 42 штуки:
E:\alexprojects\samum\trunk\blockw/blockw.cpp:60: undefined reference to `_imp___ZN12QApplicationC1ERiPPci'

E:\alexprojects\samum\trunk\blockw/blockw.cpp:68: undefined reference to `wr_open(char*)'

E:\alexprojects\samum\trunk\blockw/blockw.cpp:68: undefined reference to `rd_fil(int, za_fil*)'

E:\alexprojects\samum\trunk\blockw/blockw.cpp:68: undefined reference to `rd_spec(int, char*, za_spec*)'

E:\alexprojects\samum\trunk\blockw/blockw.cpp:77: undefined reference to `rd_item(int, za_ptr*, void*)'

.....

E:\alexprojects\samum\trunk\blockw/dos_inblkd.cpp:353: undefined reference to `_imp___Z6qDebugPKcz'

c:/qt/2010.05/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `WinMain@16'

collect2: ld returned 1 exit status

mingw32-make[1]: *** [debug\blockw.exe] Error 1

mingw32-make: *** [debug] Error 2

а когда просто пишу

fcloseall();

ошибка вот такая:


blockw.cpp: In function 'int qMain(int, char**)':

blockw.cpp:138: error: 'fcloseall' was not declared in this scope

ну это ошибка понятна... вот как с выше указанным бороться, всю голову сломал уже.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 8.7.2011, 7:29
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Ну так в чем проблема то?
Гугл в помощь.
Смотрите описание функции (что она делает и для чего) и подбирайте аналогичные для Windows,
а если аналогичных нет - то по смыслу и функциональным возможностям заменяйте на другие.

Но для этого сначала нужно досконально разобраться с той программкой, которую портируете,
т.е. что она делает, что делают эти POSIX функции и т.п.
без этого - никуда.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kerdster
  опции профиля:
сообщение 8.7.2011, 9:35
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 1.2.2009
Пользователь №: 520

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(TiiL @ 7.7.2011, 17:20) *
E:\alexprojects\samum\trunk\blockw/blockw.cpp:60: undefined reference to `_imp___ZN12QApplicationC1ERiPPci'
E:\alexprojects\samum\trunk\blockw/blockw.cpp:68: undefined reference to `wr_open(char*)'
E:\alexprojects\samum\trunk\blockw/blockw.cpp:68: undefined reference to `rd_fil(int, za_fil*)'
E:\alexprojects\samum\trunk\blockw/blockw.cpp:68: undefined reference to `rd_spec(int, char*, za_spec*)'
E:\alexprojects\samum\trunk\blockw/blockw.cpp:77: undefined reference to `rd_item(int, za_ptr*, void*)'

Не похоже на стандартные функции, никаких .h и .cpp файлов к проекту подключить не забыли?

Цитата(TiiL @ 7.7.2011, 17:20) *
c:/qt/2010.05/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `WinMain@16'

Если мне память не изменяет, то так примерно ругается если не может найти точку входа в программу, функция main() у вас объявлена?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 8.7.2011, 14:53
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


kerdster, да вот в том и дело что создавалась отдельная библиотека под linux-ом, которая создает libsamum.a, но я её создал этуже библиотеку уже под Windows, но похоже она не подхватываеться этими компонетами, которые я перевожу под Windows.

поэтому два вопроса:

1-ый:

вступление: описываю дерево папок одной большой программы:

общая папка с названием trunk, в ней лежат много папки с компонентами этой программы, так же в этой папке лежит папка lib и include, lib -> ( debug , release) и отдельно файлы .cpp .pro и т.д., в include лежат *.h, которые подгружаються в файлы .cpp, лежащие в lib. ну так вот вопрос как сделать так что бы libsamum.a создавался не в папке debug release, а просто в lib.

щас в файле .pro:

TEMPLATE = lib
CONFIG += staticlib
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
INCLUDEPATH += ../include/

или надо создать новую конфигурацию сборки отличающиеся от дебаг и релиз? тогда как это сделать?

2-ой :

У меня создаеться бибилотека с именем libsamum.a а нужно просто что samum.a. Как это реализовать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 8.7.2011, 19:17
Сообщение #8


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

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(TiiL @ 7.7.2011, 17:06) *
mknod это чисто Unix функция, можеть быть есть таже функция, но под Window

mknod в данном случае создаёт named pipe (FIFO для какого-то обмена). в венде данной функции нет. надо смотреть, для чего создаётся pipe и кто обменивается данными. в венде это будет либо межпроцессное взаимодействие, либо какой-то поток данных внутри процесса.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 13.7.2011, 10:26
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


Еще вопросики, как в файле *.pro задать условие: если Linux то "строчка читаеться", если нет то не читать.

и второй есть путь к библиотеке:

LIBS += E:\alexprojects\samum\trunk\lib\debug\libsamum.a

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

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

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 13.7.2011, 11:45
Сообщение #10


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

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(TiiL @ 13.7.2011, 12:26) *
хотелось бы прописать его так чтобы на любой комп, на который я принесу эту проект, не изменяю пути видел библиотеку.

тут несколько путей:
1. ты складываешь библиотеку куда-то внутри своего проекта и прописываешь относительный путь (что-то типа LIBS += ..\samum\trunk\lib\debug\libsamum.a)

2. ты объявляешь переменную среды, вроде SAMUM_DIR, и юзаешь её через значение: LIBS += $(SAMUM_DIR)\lib\debug\libsamum.a
а экспортируешь её, например, из скрипта, в зависимости от системы.

а так, линюкс все библиотеки стандартно хранит в системно прописанных путях и ему не нужно указывать путь, если библиотека установлена стандартно. более того, чтобы потом она работала, тебе придётся либо её установить, либо при линковке указать, что нужно искать библиотеки в локальной папке: к линкеру добавлять строку -R . (точка там нужна!), либо при старте указывать путь поиска библиотеки в LD_LIBRARY_PATH.

Сообщение отредактировал Iron Bug - 13.7.2011, 11:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.3.2025, 0:59