![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
TiiL |
![]()
Сообщение
#1
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 124 Регистрация: 8.6.2011 Пользователь №: 2727 Спасибо сказали: 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 |
![]()
Сообщение
#2
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
А где собственно этот самый mknod объявляется? + if(mknod(nameOUT, S_IFIFO | 0666, 0) < 0) жирным выделены права на создаваемый объект в файловой системе. А точнее всем на чтение\изменения.
|
|
|
TiiL |
![]()
Сообщение
#3
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 124 Регистрация: 8.6.2011 Пользователь №: 2727 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
silver47, на ваш вопрос я не знаю ответа где он объявляеться, но через поиск mknod не находит в в файлах*.h .
По-гуглив, я понял что mknod это чисто Unix функция, можеть быть есть таже функция, но под Window? поправте, если я ошибаюсь. |
|
|
TiiL |
![]()
Сообщение
#4
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 124 Регистрация: 8.6.2011 Пользователь №: 2727 Спасибо сказали: 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 |
![]()
Сообщение
#5
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: ![]() ![]() ![]() |
Ну так в чем проблема то?
Гугл в помощь. Смотрите описание функции (что она делает и для чего) и подбирайте аналогичные для Windows, а если аналогичных нет - то по смыслу и функциональным возможностям заменяйте на другие. Но для этого сначала нужно досконально разобраться с той программкой, которую портируете, т.е. что она делает, что делают эти POSIX функции и т.п. без этого - никуда. |
|
|
kerdster |
![]()
Сообщение
#6
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 1.2.2009 Пользователь №: 520 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
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 файлов к проекту подключить не забыли? 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 |
![]()
Сообщение
#7
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 124 Регистрация: 8.6.2011 Пользователь №: 2727 Спасибо сказали: 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
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
mknod это чисто Unix функция, можеть быть есть таже функция, но под Window mknod в данном случае создаёт named pipe (FIFO для какого-то обмена). в венде данной функции нет. надо смотреть, для чего создаётся pipe и кто обменивается данными. в венде это будет либо межпроцессное взаимодействие, либо какой-то поток данных внутри процесса. |
|
|
TiiL |
![]()
Сообщение
#9
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 124 Регистрация: 8.6.2011 Пользователь №: 2727 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Еще вопросики, как в файле *.pro задать условие: если Linux то "строчка читаеться", если нет то не читать.
и второй есть путь к библиотеке: LIBS += E:\alexprojects\samum\trunk\lib\debug\libsamum.a хотелось бы прописать его так чтобы на любой комп, на который я принесу эту проект, не изменяю пути видел библиотеку. Заранее спасибо. |
|
|
Iron Bug |
![]()
Сообщение
#10
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
хотелось бы прописать его так чтобы на любой комп, на который я принесу эту проект, не изменяю пути видел библиотеку. тут несколько путей: 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 |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.3.2025, 0:59 |