Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Ошибки в процессе компиляции.

Ответить
Настройки темы
Ошибки в процессе компиляции.

Аватара для Interceptor

Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нужна помощь.
После того, как прочел первый урок:
http://fox-toolkit.by.ru/tut1.html
- скачал листинги программы: mywindow.cpp, mywindow.h.
И попытался скомпилировать это дело с помощью Dev-C++.
У меня возникло множество ошибок такого типа:

[Linker error] undefined reference to `FX::FXMetaClass::search(unsigned) const'
[Linker error] undefined reference to `FX::FXMainWindow::handle(FX::FXObject*, unsigned, void*)'
...
C:\Program Files\Dev-Cpp\Projects\Test\12\Makefile.win [Build Error]  [Project2.exe] Error 1

Был бы очень благодарен, если бы кто-то подсказал, в чём тут может быть проблема.

-------
Как приятно порой бывает, когда тебя не понимают.


Отправлено: 02:56, 18-10-2004

 

Аватара для [mzd]

Линуксоид-стакановец


Сообщения: 2391
Благодарности: 186

Профиль | Отправить PM | Цитировать


А правильно ли прописаны пути к библиотекам?
Для Linux это указано внизу страницы
Код: Выделить весь код
-L$FOX_PREFIX/lib -L/usr/X11R6/lib
, может, что-то подобное надо указать для Винды?

Добавлено:

Конкретно, вот эта часть
Код: Выделить весь код
-L$FOX_PREFIX/lib
указывает, где лежат библиотеки FOX. $FOX_PREFIX - префикс, переменная типа $PATH в Delphi, ИМХО, должна получать свое значение при установке FOX.  

-------
Живя в реальном мире, стремись к невероятному... Эрнесто Че Гевара
Everybody lies. (c) House M.D.
Базовая настройка Ubuntu. Документация для новичка.
Руководство по установке, начальной настройке и основам использования операционной системы Ubuntu


Отправлено: 08:18, 19-10-2004 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


В общем-то сабж.
Есть чудесные строчки кода по уменьшению выходного файла при компиляции в С++.
Без никаких нареканий компилятся в Visual C++ из VS6
Код: Выделить весь код
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:main")
В Visual C++ 2008 Express Edition возникают сложности.
Почитав MSDN
Цитата /SECTION (Specify Section Attributes):
"/SECTION":
'E' - Execute ("The section is executable").
'W' - Write ("Allows write operations on data").
'R' - Read ("Allows read operations on data").
'X' - Memory-resident ("VxD only; marks the section as memory-resident"). >>
убираю Х, меняю /SECTION:.text,EWRX на /SECTION:.text,EWR.
После этого удаётся их скормить и новейшему компилятору от МикроСофт.
Тем не менее, он их воспринимает с предупреждениями
Код: Выделить весь код
main.obj : warning LNK4229: invalid directive '/FILEALIGN:512' encountered; ignored
main.obj : warning LNK4229: invalid directive '/IGNORE:4078' encountered; ignored
и выдаёт ЕХЕ несколько больше чем компилятор из далёкого 1998года.

Сейчас не проверял, но помнится компилятор 2003го тоже адекватно воспринимал строчки кода, как и 1998 и даёт ехе несколько меньше. Насчёт 2005го не знаю.

В новой редакции MSDN замены им не было найдено. Какие необходимо дать эквиваленты директивы взамен '/FILEALIGN:512' и '/IGNORE:4078'? Или есть строчки поколения 2008, которые фантастически уменьшают размер проги?
Указанные выше строки времён 1998го года.

Отправлено: 15:33, 24-05-2008 | #3


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Покопался в MSDN 6.0 т.е 1998 г. - там вообще в справке нету упоминаний о директивах /IGNORE и /FILEALIGN (хотел посмотреть что они делают) Недокументированные какие-то директивы


Ты указываешь конфигурацию рилиз или дебаг? Попробуй билдить на конфе рилиз. Build -> Configuration Manager : Release

Код: Выделить весь код
#include <windows.h>

#pragma comment(linker,"/ENTRY:NWinMain")

void NWinMain(void)
{ 
	MessageBoxW(0, (LPCWSTR) "Hello, Windows" , (LPCWSTR)"hid", NULL);
}

Вот эта программа весит 3584. Много?
Если еще твои строчки добавить получается ~3000 .
Project -> Properties -> Linker: Manifest File
Generate Manifest -> No
Generate Debug Info -> No

В результате 2048
при компиле в 6-ой весит 1536

-------
Ehhh.. what's up, doc?..


Отправлено: 20:31, 25-05-2008 | #4


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


mrcnn, спасибо за ответ.
Конечно же сиё работает только при компиляции в RELEASE. В DEBUG даже VC++ 6 будет ругаться.
Строчки почерпнул с этой статьи.
Это ведь частный случай, программа на одну строчку. И хотелось разобраться что б строчки и современным компилятором воспринимались. Не документированные, что ж значит и в современном компиляторе есть аналоги. Как видно функциональность от этих строк вовсе не зависит, так что не стоит боятся о труднопереносимости кода между компиляторами.

Кстати мой мин вариант 1024 байта на VC++ 6, кстати кто хочет ещё меньше можно использовать /opt:nowin98, уменьшив правда скорость загрузки в память, что на современных компах не заметно, но опять же в VC++ 6 работает, а в VC++ 2008 игнорируется. Меньше уже наверное только ассемблеру под силу. Слышал что рабочий ехе можно скомпилить в 34 байта!

Отправлено: 21:07, 25-05-2008 | #5


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать



Я об этих строчках узнал отсюда http://uinc.ru/articles/28/
Date: 15/01/2002

Там прога не на одну строчку.

В проге для DOS - Размер заголовка 1Ch. Так что 34 байта, наверное, реально получить. Windows в принципе должна поддерживать программы для DOS.

В формате PE (PortableExecutables) подразумевается, что размер заголовка составит f8h со смещения 40h (Итого 312 - это минимум) Смещение 40h для совместимости DOS приложений. Таблица секций размера 2Ch (44) Итого 356. Ниже уже вряд ли..


-------
Ehhh.. what's up, doc?..


Последний раз редактировалось mrcnn, 26-05-2008 в 07:43.


Отправлено: 07:18, 26-05-2008 | #6


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Цитата mrcnn:
Итого 312 - это минимум »
Я тоже напутал с 34 байтами. Я нашёл ту статью - 153 байта миниму в РЕ формате. Но там уже чисто Ассемблер. Причём прога даже в Досе запускается с требованием большей памяти, как утверждает автор.

Отправлено: 12:08, 26-05-2008 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Ошибки в процессе компиляции.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
FreeBSD - ошибка компиляции ядра 7.1 kirimey Общий по FreeBSD 7 02-05-2009 15:48
C++ Builder || ускорение компиляции XCodeR Программирование и базы данных 1 30-01-2007 00:23
Ошибка компиляции ifmail BurzumII Программное обеспечение Linux и FreeBSD 6 09-01-2005 19:54
различные EXE после компиляции Guest Программирование и базы данных 4 12-05-2004 13:54
Ошибки при компиляции нового ядра Guest Общий по Linux 7 07-12-2002 10:44




 
Переход