2010-05-08 3 views
4

Я пытаюсь скомпилировать программу Windows C++ в g ++. Это то, что я получаю.Компиляция программы на Windows C++ в g ++

/usr/include/c++/4.4/backward/backward_warning.h:28:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. 
btree.cpp:1204: error: ‘_TCHAR’ has not been declared 
btree.cpp: In function ‘int _tmain(int, int**)’: 
btree.cpp:1218: error: ‘__int64’ was not declared in this scope 
btree.cpp:1218: error: expected ‘;’ before ‘frequency’ 
btree.cpp:1220: error: ‘LARGE_INTEGER’ was not declared in this scope 
btree.cpp:1220: error: expected primary-expression before ‘)’ token 
btree.cpp:1220: error: ‘frequency’ was not declared in this scope 
btree.cpp:1220: error: ‘QueryPerformanceFrequency’ was not declared in this scope 
btree.cpp:1262: error: expected primary-expression before ‘)’ token 
btree.cpp:1262: error: ‘start’ was not declared in this scope 
btree.cpp:1262: error: ‘QueryPerformanceCounter’ was not declared in this scope 
btree.cpp:1264: error: name lookup of ‘i’ changed for ISO ‘for’ scoping 
btree.cpp:1264: note: (if you use ‘-fpermissive’ G++ will accept your code) 
btree.cpp:1304: error: expected primary-expression before ‘)’ token 
btree.cpp:1304: error: ‘end’ was not declared in this scope 
btree.cpp:1306: error: ‘total’ was not declared in this scope 
btree.cpp:1316: error: ‘getchar’ was not declared in this scope 

Первое, что я заметил, что эти типы переменных называются _TCHAR, _int64 и LARGE_INTEGER, что, вероятно, вещь для Windows. Что можно изменить, чтобы они работали в g ++?

Кроме того, если есть что-то еще, что вы знаете, можно преобразовать в g ++, это было бы полезно.

Я получил код здесь: http://touc.org/btree.html

+0

Я уже удалял windows.h, но он не решил эти проблемы. – neuromancer

ответ

3

От связанной страницы:

// the main function is just some code to test the b-tree. it inserts 100,000 elements, 
    // then searches for each of them, then deletes them in reverse order (also tested in 
    // forward order) and searches for all 100,000 elements after each deletion to ensure that 
    // all remaining elements remain accessible. 

Если вы канаву _tmain в целом, вы должны в основном быть хорошо идти. __int64 и LARGE_INTEGER используются только для того, чтобы можно было вызвать QueryPerformanceCounter, и это только вызывается из основной функции теста. Похоже, что код в противном случае относительно переносимый C++, и действительно, похоже, что ошибки действительно начинаются в _tmain в любом случае.

0

Если вы используете _TCHAR, вы также используете другие Windows, специальные библиотеки в вашем коде. Я уже вижу QueryPerformanceCounter и QueryPerformanceFrequency (первые два метода библиотеки Windows, которые я когда-либо использовал, фактически. =]) Изменение типов не приведет вас к следующему этапу поиска соответствия функциональности за пределами Windows. Очевидно, что ваш исходный файл имеет более тысячи строк, но есть ли фрагмент, который вы переносите, который вы могли бы опубликовать, или пытаетесь сделать большой проект?

3

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

Лучшее решение, хотя и гораздо больше работы, состоит в том, чтобы положить #ifdef WIN32 блоки вокруг всех конкретных файлов Windows и аналогично #ifdef LINUX вокруг реализаций Linux той же функциональности. Это может потребовать значительной реорганизации и реорганизации.

0

Возможно, я ошибаюсь, но вам не обязательно, чтобы windows.h был включен для сборки btree или что-то в этом роде. Найдите независимый от платформы код или просто удалите все эти специфичные для платформы вызовы как QueryPerformanceCounter и т. Д.

Или просто получите еще одну хорошую реализацию дерева B (или B +) на базе шаблона. Их много, я могу поделиться своими, если захочу.

+0

Не могли бы вы его загрузить или отправить ссылку? Я не нашел никакого исходного кода B-дерева, написанного в g ++. – neuromancer

Смежные вопросы