|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Ошибки в процессе компиляции. |
|
Ошибки в процессе компиляции.
|
Новый участник Сообщения: 46 |
Профиль | Отправить 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 |
Линуксоид-стакановец Сообщения: 2391
|
Профиль | Отправить PM | Цитировать А правильно ли прописаны пути к библиотекам?
Для Linux это указано внизу страницы , может, что-то подобное надо указать для Винды? Добавлено: Конкретно, вот эта часть указывает, где лежат библиотеки FOX. $FOX_PREFIX - префикс, переменная типа $PATH в Delphi, ИМХО, должна получать свое значение при установке FOX. |
------- Отправлено: 08:18, 19-10-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3320
|
Профиль | Отправить 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") Почитав MSDN Цитата /SECTION (Specify Section Attributes):
После этого удаётся их скормить и новейшему компилятору от МикроСофт. Тем не менее, он их воспринимает с предупреждениями main.obj : warning LNK4229: invalid directive '/FILEALIGN:512' encountered; ignored main.obj : warning LNK4229: invalid directive '/IGNORE:4078' encountered; ignored Сейчас не проверял, но помнится компилятор 2003го тоже адекватно воспринимал строчки кода, как и 1998 и даёт ехе несколько меньше. Насчёт 2005го не знаю. В новой редакции MSDN замены им не было найдено. Какие необходимо дать эквиваленты директивы взамен '/FILEALIGN:512' и '/IGNORE:4078'? Или есть строчки поколения 2008, которые фантастически уменьшают размер проги? Указанные выше строки времён 1998го года. |
|
Отправлено: 15:33, 24-05-2008 | #3 |
Ветеран Сообщения: 1404
|
Профиль | Отправить 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 |
------- Отправлено: 20:31, 25-05-2008 | #4 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать mrcnn, спасибо за ответ.
Конечно же сиё работает только при компиляции в RELEASE. В DEBUG даже VC++ 6 будет ругаться. Строчки почерпнул с этой статьи. Это ведь частный случай, программа на одну строчку. И хотелось разобраться что б строчки и современным компилятором воспринимались. Не документированные, что ж значит и в современном компиляторе есть аналоги. Как видно функциональность от этих строк вовсе не зависит, так что не стоит боятся о труднопереносимости кода между компиляторами. Кстати мой мин вариант 1024 байта на VC++ 6, кстати кто хочет ещё меньше можно использовать /opt:nowin98, уменьшив правда скорость загрузки в память, что на современных компах не заметно, но опять же в VC++ 6 работает, а в VC++ 2008 игнорируется. Меньше уже наверное только ассемблеру под силу. Слышал что рабочий ехе можно скомпилить в 34 байта! |
|
Отправлено: 21:07, 25-05-2008 | #5 |
Ветеран Сообщения: 1404
|
Профиль | Отправить 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. Ниже уже вряд ли.. |
------- Последний раз редактировалось mrcnn, 26-05-2008 в 07:43. Отправлено: 07:18, 26-05-2008 | #6 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать |
Отправлено: 12:08, 26-05-2008 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|