портирование проекта linux -> windows
От: Аноним  
Дата: 17.02.08 06:28
Оценка:
Потдскажите какие строчки поменять\добавить?
вот на эту
#include <unistd.h>

вот так ругается
async.hh(25) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
crypt_handler.cpp

тут кое-что поменял
#ifdef WIN32
#include <winsock.h>
//#include <winsock2.h>
//#include <WS2tcpip.h>
#else
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#endif

#include <stdio.h>
#include <errno.h>
#include <netdb.h>

но вот так ругается на последние 3 строчки...
flow_handler.hh(47) : fatal error C1083: Cannot open include file: 'netdb.h': No such file or directory
stdafx.cpp

тут несоответствие параметров
#define ts_debug(level, fmt, args...) __ts_debug_i(level, __FILE__, __LINE__, fmt, ##args)
#define ts_error(fmt, args...) ts_debug(-1, fmt, ##args)
#define ts_debug_1(fmt, args...) ts_debug(1, fmt, ##args)
#define ts_debug_2(fmt, args...) ts_debug(2, fmt, ##args)
#define ts_debug_3(fmt, args...) ts_debug(3, fmt, ##args)
#define ts_debug_4(fmt, args...) ts_debug(4, fmt, ##args)
#define ts_fatal(fmt, args...) (ts_error(fmt, ##args), exit(-1))

собсно, вот...
 error C2010: '.' : unexpected in macro formal parameter list

_________
Заранее благодарен!

19.02.08 13:31: Перенесено модератором из 'C/C++' — Кодт
Re: портирование проекта linux -> windows
От: ioni Россия  
Дата: 17.02.08 08:18
Оценка:
Здравствуйте, Аноним, Вы писали:


#include <unistd.h>

такого файла в windows нет
а что там такое?

>тут кое-что поменял

#ifdef WIN32

#include <windows.h>
#include <winsock2.h>

#else
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h> 
#endif

#include <stdio.h>
#include <errno.h>
// #include <netdb.h> // <-- такого файла нет
А>


#define ts_debug(level, fmt, args...) __ts_debug_i(level, __FILE__, __LINE__, fmt, ##args)
#define ts_error(fmt, args...) ts_debug(-1, fmt, ##args)
#define ts_debug_1(fmt, args...) ts_debug(1, fmt, ##args)
#define ts_debug_2(fmt, args...) ts_debug(2, fmt, ##args)
#define ts_debug_3(fmt, args...) ts_debug(3, fmt, ##args)
#define ts_debug_4(fmt, args...) ts_debug(4, fmt, ##args)
#define ts_fatal(fmt, args...) (ts_error(fmt, ##args), exit(-1))

с этим надо разбираться отдельно но по всей видимости это обычные трейсы
для начала заменить на обычный printf или OutputDebugString
Re: портирование проекта linux -> windows
От: Michael7 Россия  
Дата: 17.02.08 12:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Потдскажите какие строчки поменять\добавить?


Если программа использует не только стандартные функции и библиотеки C/C++ так просто "на халяву" вы из linux в windows код не перенесёте. Нужно разбираться с работой. Я смотрю, там у вас есть в частности сокеты, а они в linux и windows не совсем одинаково работают, что описано хотя бы в этой статье: Разница в работе с сокетами Windows и Linux
Автор: Gomes
Дата: 06.10.05


А>вот на эту

А>
А>#include <unistd.h>
А>

А>вот так ругается

Потому что это в Posix системах такая вещь: unistd.h

Дальше и смотреть особо не стал. Если программа активно работает с системой, а не только через стандартные функции C/C++ вам надо понимать, что она делает в linux и как можно перенести в windows. Механический подход, скорее всего, не прокатит. Некоторые posix-вещи не имеют прямых аналогов в windows, самая известная — fork() и требуют переписывания.

Могу ещё сказать, что если вы пытаетесь перенести какую-то более-менее известную OpenSource-программу, есть смысл поискать получше, скорее всего уже кто-то её портировал
Re: портирование проекта linux -> windows
От: Аноним  
Дата: 17.02.08 21:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Потдскажите какие строчки поменять\добавить?

А>вот на эту
...

Если надо быстро пользуй cygwin.

А так, все инклюды которых нет просто коментируй примерно так
#ifndef __WIN32__
#include <unistd.h>
..
#endif

макросы с произвольным кол-вом параметров:
или пользуй minGW
или пиши заглушки типа

>#define ts_debug(level, fmt, args...) __ts_debug_i(level, __FILE__, __LINE__, fmt, ##args)


void __ts_debug_i_v(int level,const char* file,int line,const char* fmt,va_list v);
struct ts_debug_helper {
    const char* file; int line;
    ts_debug_helper(const char* file,int line) : file(file), line(line) {}
    void operator() (int level,const char* fmt,...) {
        va_list v;va_start(v,fmt);
        __ts_debug_i_v(level,file,line,fmt,v);
        va_end(v);
    }
};
#define ts_debug ts_debug_helper(__FILE__,__LINE__)
Re[2]: портирование проекта linux -> windows
От: Аноним  
Дата: 18.02.08 11:36
Оценка:
На что можно заменить?
#include <sys/uio.h>
#include <sys/ioctl.h>
#include <dlfcn.h>
Re: портирование проекта linux -> windows
От: superlexx  
Дата: 18.02.08 12:35
Оценка: 1 (1)
ecли проект не ширпотребный, то можешь попробовать interix (Subsystem For UNIX Applications), там POSIX с forkом и все твои headerы есть.
Re[3]: портирование проекта linux -> windows
От: Michael7 Россия  
Дата: 18.02.08 12:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>На что можно заменить?

А>#include <sys/uio.h>
А>#include <sys/ioctl.h>

Эти модули поддерживают разные операции ввода-вывода. Надо смотреть, что конкретно используется.

А>#include <dlfcn.h>


Необходим для работы с разделяемыми динамически-загружаемыми библиотеками.

Скорее всего, вам достаточно уже подключенных windows.h и winsock2.h. Как вам уже посоветовали, комментируете отсутствующие в Win32-среде *.h , а далее смотрите на какие отсутствующие декларации функций ругается компилятор. Лезете в документацию по Linux/Posix, читаете что они делают и пытаетесь припомнить аналог в Win32.

У меня такое впечатление, что вы хотите как-то по-быстрому запихать linux-программу в Windows. Весьма вероятно, ничего хорошего не выйдет, программирование для linux и для windows имеют достаточно много отличий, чтобы потребовалось переписать около 20%-30% слоя кода, тесно завязанного на систему.

Могу присоединиться к совету использовать Cygwin или MinGW, если вам требуется быстро скомпилировать и заставить работать в Windows линуксовый код.

Cygwin — добавляет в Windows библиотеки и окружение, реализующие posix-вызовы, создавая Unix внутри Windows. Часто самый простой способ заставить работать linux-программу в Windows, часто достаточно её просто скомпилировать в Cygwin. Но для работы, очень возможно, будет необходим установленный Cygwin, хотя может оказаться достаточно некоторых dll от него.

MinGW + MSys — порт компилятора gcc и shell-окружения в Windows. В отличие от Cygwin, откомпилированные в MinGW + MSys программы работают с windows-окружением и не требуют MSys для своей работы. Возможно, потребуется некоторая доработка.
Re[2]: портирование проекта linux -> windows
От: Аноним  
Дата: 18.02.08 14:28
Оценка:
Здравствуйте, superlexx, Вы писали:
S>ecли проект не ширпотребный, то можешь попробовать interix (Subsystem For UNIX Applications), там POSIX с forkом и все твои headerы есть.
Нашел там только #include <sys/ioctl.h> , в рочем лучше чем ничего, а #include <dlfcn.h> выдернул из другово проекта, вроде на нем не ломается.

Категорически против вЕндолинуксяторов, а вот mingw попробую, но хочутся получить просто "прогу" под винду)

> или пиши заглушки типа

>#define ts_debug(level, fmt, args...) __ts_debug_i(level, __FILE__, __LINE__, fmt, ##args)
Хм, а можно подробнее, как это работает? Или как в гугле спросить непорусски?)
Re[3]: портирование проекта linux -> windows
От: superlexx  
Дата: 18.02.08 19:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Нашел там только #include <sys/ioctl.h>


там остальные тоже есть, см. /usr/include и ищите по именам файлов в %WINDIR%\SUA.
Re[3]: портирование проекта linux -> windows
От: Аноним  
Дата: 18.02.08 21:33
Оценка:
Здравствуйте, Аноним, Вы писали:

>> или пиши заглушки типа

>>#define ts_debug(level, fmt, args...) __ts_debug_i(level, __FILE__, __LINE__, fmt, ##args)
А>Хм, а можно подробнее, как это работает? Или как в гугле спросить непорусски?)
Очень просто работает.
http://www.gnu.org/software/libtool/manual/libc/Variable-Arguments-Output.html
http://gcc.gnu.org/onlinedocs/gcc-4.2.2//cpp/Variadic-Macros.html#Variadic-Macros

А в VS надо писать что-то типа такого:
#include <stdio.h>
#include <stdarg.h>

void ts_debug_v(const char* file,int line,const char* func,const char* fmt,va_list v) {
    printf("DEBUG: ");vprintf(fmt,v);
    printf("\n file: %s\n"
             " line: %d\n"
             " func: %s\n", file,line,func);
}

struct ts_debug_t {
    const char *file, *func; int line;
    ts_debug_t(const char* file,int line,const char* func) : file(file),line(line),func(func){}
    void operator() (const char* fmt,...) {
        va_list v;va_start(v,fmt);
        ts_debug_v(file,line,func,fmt,v);
        va_end(v);
    }
};
#define ts_debug ts_debug_t(__FILE__,__LINE__,__FUNCTION__)

void aaa() {
    ts_debug("point1 %d-%d",1,23);
}

void bbb() {
    ts_debug("point2 %s","text");
}

int main(int argc, const char *argv[]) {
    aaa();
    bbb();
    return 0;
}

/*
DEBUG: point1 1-23
 file: c:\home\Аноним\temp\ts_debug.cpp
 line: 23
 func: aaa
DEBUG: point2 text
 file: c:\home\Аноним\temp\ts_debug.cpp
 line: 27
 func: bbb 
*/


Надеюсь всё прозрачно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.