Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка компиляции, кроссплатформенное приложение 
:(
    Опции темы
Stajor
Дата 11.7.2005, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



Написал "Hello Word", используя библиотеку FLTK в MS VC 6.0, как написано в мануале (передрал все под чистую), но при компиляции вылетают ошибки:
Compiling...
hello.cxx
c:\fltk\fltk duble\fltk-1.1.6\fl\fl_window.h(91) : warning C4244: '=' : conversion from 'short' to 'unsigned char', possible loss of data
c:\fltk\fltk duble\fltk-1.1.6\fl\fl_window.h(91) : warning C4244: '=' : conversion from 'short' to 'unsigned char', possible loss of data
c:\fltk\fltk duble\fltk-1.1.6\fl\fl_window.h(91) : warning C4244: '=' : conversion from 'short' to 'unsigned char', possible loss of data
Linking...
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _toupper already defined in LIBCD.lib(toupper.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _tolower already defined in LIBCD.lib(tolower.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _free already defined in LIBCD.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _realloc already defined in LIBCD.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _malloc already defined in LIBCD.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _sprintf already defined in LIBCD.lib(sprintf.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _exit already defined in LIBCD.lib(crt0dat.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _memmove already defined in LIBCD.lib(memmove.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strtol already defined in LIBCD.lib(strtol.obj)
LINK : warning LNK4098: defaultlib "MSVCRTD" conflicts with use of other libs; use /NODEFAULTLIB:library
fltkd.lib(Fl_x.obj) : error LNK2001: unresolved external symbol __imp___TrackMouseEvent@4
Debug/hello.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

hello.exe - 11 error(s), 4 warning(s)
Каким образом избавиться от ошибок переопределения???
PM MAIL   Вверх
ManiaK
Дата 11.7.2005, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



В настройках проекта есть список подключаемых lib-библиотек. У тебя в двух из них (MSVCRTD.lib и LIBCD.lib) определены функции с одинаковыми именами. Это и вызывает ошибку. Нужно залезть в настройки и отключить библиотеку MSVCRTD. Плюс ко всему, у тебя ещё не определена используемая функция TrackMouseEvent. Тоже покопайся - может файл какой забыл подключить или ещё что-нибудь.
PM MAIL WWW   Вверх
Stajor
Дата 11.7.2005, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



Дело в том, что явного подключения, в свойствах проекта, этих библиотек нет (отсутствуют и MSVCRTD.lib и LIBCD.lib). Попробовал поставить в игнор MSVCRTD.lib, так ошибок стало еще больше. А вот игнор LIBCD.lib дал результат, что ошибок стало намного меньше (ругается как раз таки на symbol __imp___TrackMouseEvent@4 в подключенной библиотеке fltkd.lib).

Это сообщение отредактировал(а) Stajor - 11.7.2005, 14:36
PM MAIL   Вверх
ManiaK
Дата 11.7.2005, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



TrackMouseEvent - не из WinAPI случаем функцийка-то?.. Что-то у тебя там с настроечками..
PM MAIL WWW   Вверх
Void
Дата 11.7.2005, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



unresolved symbol TrackMouseEvent - это однозначно надо подключать user32.lib.
Остальные ошибки... похоже, что кто-то пытается одновременно прилинковать и static и shared версию RTL. Попробуйте поменять в настройках проекта версию RTL - /MDd вместо /MLd, или наоборот.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Stajor
Дата 12.7.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



2ManiaK
Согласен, что скорее всего дело в настройках, но вот как правильно все настроить нигде пока не нашел.

2Void
Ошибка осталась только одна - fltkd.lib(Fl_x.obj) : error LNK2001: unresolved external symbol __imp___TrackMouseEvent@4, но user32.lib была подключена изначально (идет сразу за подключением kernel32.lib).
А вот версию RTL что то я найти немогу (наверное уже перегреваться стал), может подскажешь...
Сори, нашел, изменил, никакого эфекта, ошибка осталась по прежнему smile

Это сообщение отредактировал(а) Stajor - 12.7.2005, 12:15
PM MAIL   Вверх
Stajor
Дата 12.7.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



Так, нашел... smile
Надо было еще подключить MS либу COMCTL32.LIB...(и нигде же в мануале об этом ничего не сказано) smile

З.Ы
Интересно, а какие же проблемы будут при переносе проекта в *nix smile

Это сообщение отредактировал(а) Stajor - 12.7.2005, 12:37
PM MAIL   Вверх
Дрон
Дата 12.7.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Stajor

Цитата(Stajor @ 12.7.2005, 13:35)
Интересно, а какие же проблемы будут при переносе проекта в *nix

А он просто не будет компилиться и всё smile

Где ж ты в никсах найдёшь, ну например, тот же comctrl32.lib? smile


--------------------
Да. Именно так.
PM   Вверх
Stajor
Дата 12.7.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



Цитата
А он просто не будет компилиться и всё


Тогда каким образом можно на VC написать, переносимую на другую систему, программу smile Я предпологаю, что в *nix нужно будет использовать ее библиотеки для сборки этой же программы...
PM MAIL   Вверх
ManiaK
Дата 12.7.2005, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Цитата(Stajor @ 12.7.2005, 15:48)
Тогда каким образом можно на VC написать, переносимую на другую систему

Необходимо использовать что угодно, но только не MFC/WTL/WinAPI а также всё, что завязано на Windows. Нужно использовать кроссплатформенные библиотеки. А ещё лучше - перейти на gcc компилятор; в Win32 есть для него хорошая оболочка (не VC конечно, но всё же) - DevCpp.
PM MAIL WWW   Вверх
Stajor
Дата 12.7.2005, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



Цитата(ManiaK @ 12.7.2005, 14:58)
Необходимо использовать что угодно, но только не MFC/WTL/WinAPI а также всё, что завязано на Windows.

Что-то я тогда не врубаюсь в смысл предложения команды разработчиков FLTK подключения этой либы к VC... Тем более в приложении не используется ни одна функция API, работу с ней ведет библиотека.
И каким образом приложение будет что либо (кроме консоли конечно) выводить на экран, если она не будет знать как это делать??? Каким макаром она будет общаться с системой (и не важно какая это система)???
PM MAIL   Вверх
ManiaK
Дата 12.7.2005, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



В таких библиотеках, как MFC нет разделения на "физический" уровень (работа с API Оси) и "пользовательский" (инструменты, доступные программисту-пользователю библиотеки). Потому в ней нельзя писать приложения, которые необходимо переносить на другие платформы - убьёсся. Про WinAPI и говорить нечего - там вообще напрямую с "железом". Про FLTK ничего не слышал.

Цитата(Stajor @ 12.7.2005, 16:29)
Что-то я тогда не врубаюсь в смысл предложения команды разработчиков FLTK подключения этой либы к VC...


Писать кроссплатформенные библиотеки на VC можно, но, как мне кажется, несколько неразумно и порой даже опасно. Стандарт Си++ только на бумаге, в действительности почти каждый компилятор обладает своими спец. особенностями. В тех же никсах VC, зато есть gcc. Потому и говорю - писать кроссплатформенные программы лучше на кроссплатформенных же компиляторах. Лучше, но необязательно.
PM MAIL WWW   Вверх
srd
Дата 12.7.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Что-то я не понимаю, причём здесь MFC?

FLTK - это нормальная кросс-платформенная библиотека. При её сборке под *nix используются юниксовые либы, при сборке под Windows - Win32 библиотеки. Вот последнии ты и забыл подключить (это про __imp___TrackMouseEvent@4).

Что касается LIBCD.lib, то игнорирование этих сообщений здесь не поможет. Лучше разберись, с какой версией CRT ты собрал FLTK, и настрой свой проект на ту же версию CRT. Точно не помню, кажется FLTK по-умолчанию собирается с Multithreaded Shared Release CRT.



--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Stajor
Дата 13.7.2005, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



Цитата(srd @ 12.7.2005, 17:27)
Что касается LIBCD.lib, то игнорирование этих сообщений здесь не поможет. Лучше разберись, с какой версией CRT ты собрал FLTK, и настрой свой проект на ту же версию CRT. Точно не помню, кажется FLTK по-умолчанию собирается с Multithreaded Shared Release CRT.


Да, именно из-за версии-то все проблемы и были *))). (Хотя игнор LIBCD.lib тоже помог).


Цитата(srd @ 12.7.2005, 17:27)
FLTK - это нормальная кросс-платформенная библиотека. При её сборке под *nix используются юниксовые либы, при сборке под Windows - Win32 библиотеки. Вот последнии ты и забыл подключить (это про __imp___TrackMouseEvent@4).


Вот тут я согласен (каким образом проект, написаный с помощью флтк, мог бы работать самостоятельно, не используя функций самой системы???).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0640 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.