Topic: Can’t create object file (error code:5) (Read 14848 times)
I was getting this error during the build operation of a new project:
-
Free Pascal Compiler version 3.0.0 [2016/02/14] for i386
-
Copyright (c) 1993—2015 by Florian Klaempfl and others
-
(1002) Target OS: Win32 for i386
-
(3104) Compiling project1.lpr
-
(3104) Compiling unit1.pas
-
(9022) Compiling resource U:Micheuslibi386—win32project1.or
-
(9015) Linking project1.exe
-
U:Micheusproject1.lpr(20,1) Error: (9003) Can‘t create object file: project1.exe (error code: 5)
-
U:Micheusproject1.lpr(20,1) Fatal: Can’t create executable project1.exe
-
Fatal: (1018) Compilation aborted
By looking at the forum I found this comment in a thread which was related to the same error:
Before we go to far here, I just found something that is intriguing. I copied the project files to a different folder, renamed them, saved them from the Lazarus environment to the new folder and now the project compiles, creates the exe and runs. Is my project name the issue??
Then I thought the error would be related to the place where I’m storing the project.
I was initially using a mapped hard driver (U: — pointing to a folder in another PC), but after I read that post I moved my project to my local hard driver (C:) and it compiled without error.
As a side note, the U: is a shared folder in local and external hard driver, so I also used the real path (z:usersMicheusproject1.lpr) and it compiled fine too.
So, Not be able to build in a «remote» folder is an correct/acceptable behavior?
Logged
It looks like the compiler accepts the mapped folder OK, but the linker not.
Do you use the built-in linker or an external linker?
Logged
Note that if project1.exe is running… (anywhere) that will also generate this error because the exe is then locked. Detaching the debugger can help as well.
Logged
«Looks» OK, doesn’t mean it is IS OK.
It looks like the compiler accepts the mapped folder OK, but the linker not.
Do you use the built-in linker or an external linker?
Lazarus 1.6 + FPC 3.0.0
From the IDE Options:
-
Lazarus directory: Z:UsuariosMicheusInstalationslazarus
-
Compiler executable: Z:UsuariosMicheusInstalationslazarusfpc3.0.0bini386—win32fpc.exe
-
FPC source directory: $(LazarusDir)fpc$(FPCVer)source
-
Make executable: $Path($(CompPath))make.exe
But, Lazarus is started from an shortcut this way: U:MicheusInstalationslazaruslazarus.exe
Could that be the problem?
Note that if project1.exe is running… (anywhere) that will also generate this error because the exe is then locked.
That is not the case.
Although I used a new project «project1.lpr» to generate the error to be reported here, my project is named and is a fresh one — never used that name before and even this PC.
Logged
1 / 1 / 0 Регистрация: 30.10.2016 Сообщений: 26 |
|
1 |
|
19.11.2016, 17:35. Показов 14669. Ответов 2
Calc.lpr(20,1) Error: Can’t create object file: Calc.exe (error code: 5) Делал, делал калькулятор, а тут вот такое, а главное раньше всё нормально было, сейчас запускаю, а он выдаёт это
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
19.11.2016, 17:35 |
2 |
551 / 875 / 144 Регистрация: 10.08.2015 Сообщений: 4,513 |
|
21.11.2016, 00:49 |
2 |
посмотри в диспетчере задач процесс Calc.exe. Вероятнее всего ошибка в твоей программе. Если программа завершена некорректно, то процесс не завершается и в следующий раз при попытке создать одноименный процесс происходит ошибка.
1 |
0 / 0 / 0 Регистрация: 22.05.2019 Сообщений: 35 |
|
24.11.2019, 10:04 |
3 |
Calc.lpr(20,1) Error: Can’t create object file: Calc.exe (error code: 5) Смотри ты запустил проект, и запустил exe файл. Из за этого не работает
0 |
Содержание
- error messages
- Contents
- Errors during compilation
- Errors during program execution
- If the bug is already known
- If the bug is not already known
- Ошибка при запуске старого проекта — Lazarus
- Ошибка при запуске старого проекта — Lazarus
- Лазарь (Паскаль) RunError (5)
- 1 ответ
- Lazarus Faq/ru
- Contents
- Общее
- Почему получаемые бинарные файлы очень большие?
- УСТАРЕЛО: Почему компоновка такая медленная в Windows?
- Мне нужен ppc386.cfg или fpc.cfg?
- Как я могу скомпилировать lazarus?
- Как собирать LCL проекты без Lazarus-а?
- Какая версия FPC требуется?
- Я не могу скомпилировать Lazarus
- При компиляции проекта возникает ошибка:
- «Cannot find Unit interfaces». Как можно это исправить?
- Когда я пытаюсь откомпилировать проект Delphi в lazarus, я получаю сообщение об ошибке
- Ошибка на строке :<$R *.DFM>. Как мне решить эту проблему?
- Ошибка: ‘Identifier not found LazarusResources’.
- При обращении к событиям объектов, например OnClick объекта button, я получаю следующую ошибку: ERROR unit not found: stdCtrls
- Как внедрять содержимое небольшого файла в исполняемый файл? Как внедрять ресурсы?
- Что означают различные расширения файлов, используемые Lazarus?
- Когда я пишу var mytext: text;, чтобы объявить текстовый файл, я получаю ошибку «Unit1.pas(32,15) Error: Error in type definition». Как можно это исправить?
- Я получаю ошибку при использовании Printer.BeginDoc
- Почему TForm.ClientWidth/ClientHeight — это то же самое, что и TForm.Width/Height?
- Отладка
- Как увидеть отладочные сообщения?
- Как мне просмотреть значение свойств?
- Почему отладчик не показывает некоторые переменные или структуры (выдавая ошибки «no such symbol»/»incomplete type»)
- Как я могу проводить отладку компонентов и пакетов FCL с помощью Lazarus
- Contributing / Making Changes to Lazarus
- Я создал патч для пристыковки окна сообщений IDE к окну «Редактор исходного кода» (снизу)
- Я исправил/улучшил Lazarus. Как добавить мои изменения в официальный код Lazarus?
- How can I become a Lazarus developer and access management in the SVN and bug-tracker?
- Где объявлены .
- Константы виртуальных клавиш
- Использование среды разработки
- Как я могу использовать «завершение идентификаторов»?
- Linux
- Как выполнить отладку в Linux без IDE?
- I can debug now but ddd does not find my sources or complains that they contain no code. Whats that?
- «> I receive an error during the linking that states /usr/bin/ld can’t find -l
- How can I convert a kylix 2 project into a lazarus project?
- When compiling lazarus the compiler can not find a unit. e.g.: gtkint.pp(17,16) Fatal: Can’t find unit GLIB
- I have installed the binary version, but when compiling a simple project, lazarus gives: Fatal: Can’t find unit CONTROLS
- Lazarus компилируется, но компоновка прерывается с ошибкой: libgdk-pixbuf not found
- Я использую SuSE, при компиляции получаю ошибку: «/usr/bin/ld: cannot find -lgtk Error: Error while linking»
- Лазарус после установки компонента падает с ошибкой runtime error 211
- Когда я запускаю программу, использующую потоки (threads), я получаю сообщение об ошибке «runtime error 232»
- У меня Ubuntu Breezy/Mandriva KDE3 и шрифты в Lazarus IDE выглядят слишком большими
- Как подключать и использовать сторонние файлы ресурсов (*.rc) в GTK приложении?
- I have Ubuntu and I cannot compile for Gtk2 due to missing libraries
- How can I compile a program for Gtk2?
- I get this message: «[WARNING] ** Multibyte character encodings (like UTF8) are not supported at the moment.»
- Windows
- &_was_unexpected_at_this_time.»> When I cycle the compiler, I get:The name specified is not recognized as an internal or external command, operable program or batch file.>& was unexpected at this time.
- When I cycle the compiler, I get: make[3]: ./ppc1.exe: Command not found
- When I try to make Lazarus I get:
- make.exe: * * * interfaces: No such file or directory (ENOENT). Stop.make.exe: * * * [interfaces_all] Error 2
- makefile:27: *** You need the GNU utils package to use this Makefile. Stop.
- How can I give my program an XP look like lazarus has?
- Когда я запускаю Windows программу, созданную в Lazarus-е, открывается консольное (DOS) окно
- Mac OS X
- Why does compiling a project fail with ‘unknown section attribute: no_dead_strip’?
- Лицензирование
- Могу ли я создавать коммерческие приложения, используя Lazarus?
- Могу ли использовать в коммерческих приложениях дополнительные компоненты Lazarus?
- Как я могу узнать, что компонент является частью LCL?
- Могу ли я создавать коммерческие плагины для Lazarus?
error messages
Contents
Errors during compilation
Unless the error identifies itself as an internal compiler error, it is unlikely that the error is caused by a bug in the compiler or its runtime library. Syntax errors are almost always due to incorrect code. Refer to the FPC Parser Messages documentation for a listing of the various Error and Warning messages produced by the FPC Parser along with explanations of them.
If you encounter an error while compiling your code and are unable to resolve it yourself, please use the FPC and Lazarus Forums, write to the Lazarus or Free Pascal mailing list or join the #fpc or #lazarus-ide IRC channel. The problem may then be solved more quickly.
If an error is encountered during compilation, the compiler does not generate an executable program. See further compile time errors.
Errors during program execution
The Free Pascal Compiler inserts code to detect a large number of error situations which might occur during program execution (eg divide by zero). If such an error situation occurs, the standard run-time library will terminate the program and print a runtime error number and the address at which the error occurred. See further runtime errors.
If you encounter a runtime error while running your program and are unable to resolve it yourself, please use the FPC and Lazarus Forums, write to the Lazarus or Free Pascal mailing list or join the #fpc or #lazarus-ide IRC channel.
If the bug is already known
Use the FPC and Lazarus Bug Tracker’s search capabilities.
Known issues. Tip: If you are experiencing problems, for example with TEdit.SelStart -> try searching «SelStart» (in quotes). If the bug is known:
- reopen if the issue is resolved or the issue is closed — use the Reopen Issue button.
- add your own note to the discussion if you received this error in another situation.
To observe any changes to your bug report — use the Monitor Issue button.
Note: You need to login to your account: Login/Create an account.
If the bug is not already known
- Go to the FPC and Lazarus Bug Tracker.
- You must be logged in: Login/Create account.
- Visit Report Issue. Fill in as many fields as possible. The more accurate the better.
- The OS and Product Version fields are especially important. If the data is not enough, they will not help you! Don’t forget to mention the system features (big endian or 64-bit).
- It is often helpful to send in a small test program to resolve the problem as soon as possible.
- If you find graphic artifacts, it would not be superfluous to send a screenshot (in png or jpeg, but not in BMP!).
- If it fails, try creating a backtrace. More information — Creating a Backtrace with GDB.
- If possible, observe the behaviour of the buggy program on different platforms or with different widgetsets.
It is also possible to get a bug fixed by paying for a solution, see Bounties.
Источник
Ошибка при запуске старого проекта — Lazarus
Я использую объект pascal в lazarus. Когда я открываю старый проект и пытаюсь запустить его; это окно кода появляется в редакторе исходного кода:
Это всплывающее окно окна кода в ошибках исходного окна сопряжено с этими ошибками:
TimeKeeper.lpr(20,1) Ошибка: не удается создать объектный файл: TimeKeeper.exe (код ошибки: 5) TimeKeeper.lpr(20,1) Ошибка: невозможно создать исполняемый файл TimeKeeper.exe
Кто-нибудь знает, что такое обходной путь?
Сообщение об ошибке указывает, что объектный файл не может быть создан, что приводит к тому, что приложение не создается. Код ошибки 5 означает отказ в доступе, что означает, что вы не имеете права на запись в каталог, в котором компилятор и компоновщик пытаются сохранить вывод, или исполняемый файл используется и не может быть заменен (возможно, антивирусным программным обеспечением), или он был сделан только для чтения.
Если проблема связана с правами, решение должно либо получить достаточные права на каталог, либо изменить путь вывода проекта к каталогу, в котором у вас есть достаточные права. Обычно это делается в Project-> «Параметры» в главном меню.
Если это связано с антивирусным программным обеспечением или другим процессом, использующим исполняемый файл, отключите программное обеспечение AV или предоставите правило исключения, которое предотвращает сканирование этой папки.
Если проблема вызвана тем, что файл доступен только для чтения, измените атрибуты файла, чтобы удалить этот атрибут.
Источник
Ошибка при запуске старого проекта — Lazarus
Я использую объект паскаль в lazarus. Когда я открываю старый проект и пытаюсь его запустить; это окно кода появляется в редакторе исходного кода:
Это всплывающее окно окна кода с ошибками исходного окна связано с этими ошибками:
TimeKeeper.lpr(20,1) Error: Can’t create object file: TimeKeeper.exe (error code: 5) TimeKeeper.lpr(20,1) Error: Can’t create executable TimeKeeper.exe
Кто-нибудь знает, что такое обходной путь?
Сообщение об ошибке указывает, что объектный файл не может быть создан, в результате чего приложение не создается. Код ошибки 5 означает, что доступ запрещен , что означает, что у вас нет доступа для записи в каталог, в котором компилятор и компоновщик пытаются сохранить выходные данные, или исполняемый файл используется и не может быть заменен (возможно, антивирусным программным обеспечением. ), либо он стал доступен только для чтения.
Если проблема связана с правами, решение состоит в том, чтобы либо получить достаточные права на каталог, либо изменить выходной путь проекта на каталог, в котором у вас есть достаточные права. Обычно это делается в Project-> Options в главном меню.
Если это связано с антивирусным программным обеспечением или другим процессом, использующим исполняемый файл, отключите антивирусное программное обеспечение или укажите правило исключения, которое предотвращает сканирование этой папки.
Если проблема вызвана тем, что файл доступен только для чтения, измените атрибуты файла, чтобы удалить этот атрибут.
Источник
Лазарь (Паскаль) RunError (5)
Моя программа завершается с помощью RunError (5), что предполагает, что она не может получить доступ к файлу, что должно быть. Я проверил, и файл используется должным образом, файл не предназначен только для чтения и т. Д. Программа создает файл .dat, если он не существует, и использует его для сохранения. Если я запустил программу, а файл не существует, файл будет создан, но после этого в том же исполнении программа не получит доступ к файлу. Это происходит ТОЛЬКО, если файл был создан в текущем исполнении.
Так вызываются процедуры (код довольно длинный, но я даю вам несколько первых строк, в которых возникает ошибка):
А затем есть каждая из процедур:
1 ответ
Ошибка выполнения 5 означает отказано в доступе. Возможно, файл доступен только для чтения, и вы используете неправильный (по умолчанию) файловый режим, или вы пытаетесь повторно открыть файл с новым дескриптором файла, не закрывая его раньше (где-то в то время и повторяющиеся циклы, возможно, вы назначаете файл более одного раза, затем сброс не удается?).
Если я правильно сейчас помню, рабочий процесс для создания должен быть следующим:
AssignFile(f, filename); Rewrite(f); CloseFile(f);
И для существующего файла:
AssignFile(f, filename); Reset(f); CloseFile(f);
Видя другие ошибки, обнаруженные в вашем коде с помощью вопросов в комментариях, я настоятельно рекомендую вам уделять больше времени отладке, а когда возникают такие ошибки — вырезать ВСЕ не относящийся к делу код и проверить дизайн своего кода на случаи, подобные вышеизложенным (назначение файла перед его созданием , и т.д.).
Источник
Lazarus Faq/ru
Примечание: Этот FAQ может быть устаревшим в некоторых частях.
Contents
Общее
Почему получаемые бинарные файлы очень большие?
Бинарные файлы очень большие из-за того, что включают в себя много отладочной информации для использования в отладчик gdb (GNU Debugger). Компилятор имеет настройку для удаления отладочной информации из исполняемого файла (-Xs), но из-за ошибки в компиляторе (версия 2.0.2 и ниже) она не работает корректно. Ошибка исправлена в версиях компилятора 2.0.4 и выше.
Вы можете использовать программу «strip» для удаления отладочной информации из исполняемых файлов. Она находится в каталоге Lazarus’а: lazarusppbini386-win32.
Наберите «strip —strip-all » в командной строке.
Если Вы хотите сделать Вашу программу очень маленькой, то Вы можете попробовать использовать UPX. UPX — это очень хороший exe-упаковщик. It includes no memory overhead due to in-place decompression. И также имеет очень быструю распаковку (
10 МБ/сек на Pentium 133).
Для использования upx наберите «upx » в командной строке.
После использования strip и upx простая GUI программа на Lazarus’е получается:
420Кб на Windows
Для более детальной информации о недостатках использования UPX обратитесь к статье Размер имеет значение. Также нужно отметить, что «hello world» программы lazarus уже включают в себя множество возможностей, таких как:
- Библиотеку работы с XML
- Библиотеки для обработки файлов рисунков типа png, xpm, bmp и ico
- Практически все виджеты Lazarus Component Library (LCL)
- Все Runtime библиотеки Free Pascal
Всё это делает приложение большим, но это так же и включает всё, что может потребоваться нетривиальному приложению.
Начальный размер исполняемого файла Lazarus велик, однако растёт в дальнейшем довольно медленно. Проект на С++ (это для примера, но относится и к другим языкам / инструментальные средства тоже), сначала очень маленький (типа «Hello world»), но быстро растет по экспоненте, когда Вы добавляете дополнительные возможности, чтобы написать нетривиальное приложение.
Краткое руководство по уменьшению размера Lazarus/FPC приложения (проверено в Lazarus 0.9.26)
- 1. Project|Compiler Options|Code|Smart Linkable (-CX) -> Поставить галочку
- 2. Project|Compiler Options|Linking|Debugging|Display Line Numbers in Run-time ErrorBacktraces (-gl) -> Убрать галочку
- 3. Project|Compiler Options|Linking|Debugging|Strip Symbols From Executable (-Xs) -> Поставить галочку
- 4. Project|Compiler Options|Linking|Link Style|Link Smart (-XX) -> Поставить галочку
Самые важные элементы, мне кажется, 2 и 3. Для простого приложения выполнимый размер должен теперь составить 1-3 Мбайта вместо 15-20 Мбайт. В этом пункте Вы можете также попробовать: Project|Compiler Options|Code|Optimizations|smaller, вместо Faster -> Поставить галочку (Предупреждение: это может уменьшить производительность),
- 5. (Опционально) Запустите UPX для сжатия вашего бинарника дополнительно в 2-3 раза (Предупреждение: как сказано выше, есть недостатки в использовании UPX).
УСТАРЕЛО: Почему компоновка такая медленная в Windows?
Эта проблема свойственна лишь старым версиям: FPC 2.2 и Lazarus 0.9.24. Пожалуйста обновите Лазарус. Всё написанное здесь относится только к старым версиям.
В общем, компоновка на Windows занимает больше времени, чем на других платформах, потому что GNU компоновщик под эту операционную систему очень медленный. FPC (2.2) использует этот компоновщик при сборке программ. Эта проблема возникает только на Windows и только на слабых компьютерах (с процессором частотой менее 1ГГц и/или оперативной памятью меньше 128 Мегабайт)
Также, если вы используете умную компоновку (smartlinking), общее время компиляции так же увеличиться. Подробнее об этом можно прочитать здесь: File size and smartlinking
Для решения этой проблемы, был разработан внутренний компоновщик. Он есть во всех версиях FPC, начиная с 2.2. Его использование позволило в значительной степени сократить общее время компиляции. Внутренний компоновщик используется только при компиляции для Windows системы.
Мне нужен ppc386.cfg или fpc.cfg?
Вам нужен только fpc.cfg. В нем указаны пути, по которым компилятор будет искать библиотеки.
Как я могу скомпилировать lazarus?
Нет ничего проще 🙂
Как собирать LCL проекты без Lazarus-а?
- В тех случаях, когда использование графической среды невозможно, вы можете воспользоваться утилитой командной строки: lazbuild.
Эта утилита используется для сборки проектов и lazarus-пакетов (packages).
- Если вам нужно собрать LCL приложение без среды разработки и не используя lazbuild, вам необходимо добавить следующие строки в файл fpc.cfg
Где <целевая_система>это системный префикс, указывающий для какой системы располагаются модули. Обычно этот префикс представляет собой пару имён «Процессор-ОСь», например i386-win32, i386-linux, i386-darwin.:
После добавления этих строк в конфигурационный файл, вызовете команду: fpc myproject.lpr myproject.lpr это имя основного файла проекта (модуль начинающийся с «program» или «library»). Но имя может быть другим, т.к. Лазарус не принуждает Вас использовать расширение .lpr.
Кроме того, если Ваш проект использует какие-либо особые настройки, вы можете получить командную строку для компиляции, используя меню в Лазарусе: Проект->Параметры проекта. ->Показать параметры (параметров может быть очень много, удобно скопировать их в отдельный скрипт файл .bat или .sh);
Какая версия FPC требуется?
Версия 2.4.0 для всех операционных систем.
Я не могу скомпилировать Lazarus
- Проверьте версию компилятора
- Проверьте версию (fpc)библиотек, они должны быть той же версии
- Проверьте путь установки компилятора на наличие в нем пробелов. Пробелов в нем не должно быть!
- Проверьте наличие файла fpc.cfg, а не старого файла ppc386.cfg
- Проверьте также OS-dependent FAQs
При компиляции проекта возникает ошибка:
«Cannot find Unit interfaces». Как можно это исправить?
Ошибка возникает потомучто компилятор не может найти ‘interfaces.ppu’ или он найден, но он поврежден, неправильной версии или просрочен.
Этот модуль может находиться в lclunits—\interfaces.ppu. Например: /home/username/lazarus/lcl/units/i386-linux/gtk/interfaces.ppu.
Убедитесь, что он только здесь. Если находятся несколько версий interfaces.ppu, то вы возможно получите неверную конфигурацию (к примеру добавлен каталог lcl в список путей поиска). Удалите все interfaces.ppu, оставьте только тот что в каталоге указаном выше.
Если вы выберете другой widgetset, то при пересборке lazarus, понадобится пересобрать LCL для этого widgetset.
Если ошибка возникает несмотря на то что ‘interfaces.ppu’ на месте — значит используется, иная compiler/rtl для компиляции проекта нежели для компиляции Lazarus IDE. Можно сделать одно из следующего:
- Пересобрать LCL (или полностью Lazarus) с компилятором выбраным в Environmnent Options. Для этого можно кликнуть Tools -> Build Lazarus. Перед этим проверьте текущие настройки в Tools -> Configure Build Lazarus.
- Поменять компилятор в Environment Options на тот что используется для компиляции Lazarus. Посмотрите внимательно также в Environment Options что используются корректный путь к каталогу Лазаря (Lazarus Directory) и к исходникам FPC. Убедитесь что есть только только один файл конфигурации fpc.cfg — он должен располагаться /etc/ для Linux/Unix или вместе с компилятором fpc под Windows. Попробуйте запустить «fpc -vt bogus» для того чтобы увидеть какой fpc.cfg используется на вашей системе. Мешающие копии обычно появляются при обновлении компилятора; они могут находится в домашнем каталоге или вместе с пересобраным новым компилятором. УДАЛИТЕ ИХ!!
- Можно также попробовать сменить текущий widgetset проекта. Например, примерный проект «objectinspector» поставляемый с Лазарем поумолчанию использует gtk. Компиляция этого проекта наверняка выдаст «Can’t find unit interfaces» под Windows. Смена widgetset на default(Win32) в Project | Compiler Options. | LCL Widget Type (various) должно исправить это.
Когда я пытаюсь откомпилировать проект Delphi в lazarus, я получаю сообщение об ошибке
Ошибка на строке :<$R *.DFM>. Как мне решить эту проблему?
Lazarus (а точнее — Linux) не знает о таком понятии, как «ресурсы», и не может использовать некоторые связанные с ними понятия, пришедшие из Delphi/Win32. Однако, Lazarus использует методы, обеспечивающие совместимость с этими понятиями. Вы сможете использовать формы Delphi (файлы .dfm), если выполните следующие шаги:
- Используйте текстовые версии .dfm-файлов. D5 и более поздние версии используют такие файлы по умолчанию. Если у вас более старые файлы, выполните следующее: нажмите ALT-F12 для просмотра кода формы в виде текста и скопируйте/вставьте текст. Если у вас есть текстовый .dfm-файл, просто скопируйте его содержание в .lfm-файл.
- Создайте файл с помощью lazres (в меню lazarus/tools) следующей командой: lazres yourform.lrs yourform.lfm
- Добавьте следующую строку в секцию initialization:
Пожалуйста, помните, что не все свойства объектов, описанные в dfm-файлах, поддерживаются Lazarus, и часть из них может вызвать падения IDE.
Примечание: Вы не получите этой ошибки, начиная с версии Lazarus 0.9.29 (SVN) при использовании FreePascal 2.4.0 и выше. Компилятор этой версии умеет включать такие ресурсы в исполняемый файл на всех платформах. Тем не менее, проблема несовместимости отдельных свойств от этого не исчезает.
Ошибка: ‘Identifier not found LazarusResources’.
При создании формы Lazarus автоматически добавляет некоторые необходимые модули в секцию uses вашего модуля, содержащего форму. После конвертации из Delphi в модуле могут отсутствовать необходимые ссылки. В данном конкретном случае вам необходимо добавить в секцию uses модуль LResources.
При обращении к событиям объектов, например OnClick объекта button, я получаю следующую ошибку: ERROR unit not found: stdCtrls
Убедитесь (Project -> Project Inspector),что ваш проект зависит от пакета ‘LCL’ и что вы установили исходники FPC.
Lazarus — это IDE (среда разработки) и библиотека визуальных компонентов LCL. Все другие вещи, как IO, Database, FCL и RTL предоставляются FPC. IDE нужны пути ко всем исходникам.
Пути к исходникам FPC могут быть установлены через: Environment -> Environment Options -> Files -> FPC source directory (Окружение -> Параметры -> Файлы -> Каталог исходного кода FPC).
Как внедрять содержимое небольшого файла в исполняемый файл? Как внедрять ресурсы?
создаст sound.lrs из sound1.wav и sound2.wav.
Потом включите его *после* lrs-файла формы:
В Вашей программе эти ресурсы можно использовать следующим образом:
Что означают различные расширения файлов, используемые Lazarus?
Глава Lazarus Tutorial#The Lazarus files разъясняет назначение некторых расширений. Вот их краткий список:
*.lpi файл с информацией о проекте Lazarus (в формате XML; содержит настройки, относящиеся к конкретному проекту) *.lpr программный файл Lazarus; содержит основной Pascal-код программы *.lfm файл формы Lazarus; содержит информацию обо всех объектах, размещённых на форме (хранится в специальном текстовом формате; связанные с объектами формы действия хранятся в одноимённом *.pas -файле) *.pas или *.pp модуль с Pascal-кодом (обычно связан с формой в одноимённом *.lfm -файле) *.lrs файл ресурсов Lazarus (это генерируемый файл; не является файлом ресурсом Windows). Этот файл может быть создан с помощью утилиты lazres (в каталоге Lazarus/Tools) путё вызова из командной строки: lazres myfile.lrs myfile.lfm *.ppu скомпилированный модуль *.lpk информационный файл для пакета Lazarus (в формате XML; содержит настройки, относящиеся к конкретному пакету)
Когда я пишу var mytext: text;, чтобы объявить текстовый файл, я получаю ошибку «Unit1.pas(32,15) Error: Error in type definition». Как можно это исправить?
Класс TControl содержит свойство Text. В методе формы используется типText из модуля system. Вы можете использовать тип TextFile, который всего лишь является другим названием типа Text, или можете добавить модуль при объявлении (см. в примере):
Сходный конфликт имен существует и при связывании и закрытии текстового файла. TForm имеет методы assign и Close. Вместо них вы можете использовать AssignFile и CloseFile, или же добавлять имя модуля System (System.Close, System.Assign).
Я получаю ошибку при использовании Printer.BeginDoc
Модуль Printers должен быть добавлен в секцию uses.
Пакет Printer4Lazarus должен быть добавлен в зависимости Вашего проекта в IDE: Project|Project Inspector|Add|New Requirement|Package Name:
Если пакета Printer4Lazarus нет в списке пакетов, то Вам нобходимо установить его. Пакет является частью установки Lazarus и может быть найден по следующему пути: [каталог установки lazarus]componentsprinters
Если Вы используете стандартный путь для установки Lazarus’а, то [каталог установки larazus] находится:
- Windows: c:lazarus
- Linux: /usr/lib/lazarus
Данное решение также применимо, если Вы получаете исключения при использовании Printer.Printers
Почему TForm.ClientWidth/ClientHeight — это то же самое, что и TForm.Width/Height?
TForm.Width/Height не включают границ окна, поскольку не существует способа получить размер этих границ на всех платформах. Без надёжного способа LCL будет перемещать формы по всему экрану или бесконечно изменять их размер.
В конечном итоге, когда появится надёжный способ получения размера и позиции окна вместе с его границами для всех платформ, это будет изменено. Для сохранения совместимости со старыми LCL-формами, будет введён номер версии и использованы некоторые другие дополнительные методы.
Отладка
Как увидеть отладочные сообщения?
В модуле LCLProc в LCL есть две процедуры для вывода отладочных сообщений. Они называются:
- DebugLn: которая работает также, как WriteLn, но принимает только строки.
- DbgOut: которая работает также, как Write, но принимает только строки.
В обычных условиях сообщения выводятся в stdout. Если stdout закрыт (например когда приложение <$AppType Gui>или откомпилировано с ключом -WG под Windows), сообщения не выводятся никуда.
Отладочные сообщение могут также выводится в файл. Код инициализации модуля LCLProc проверяет командую строку Lazarus.exe’s на предмет наличия ключа ‘—debug-log= ‘. Если этот ключ присутствует — весь последующий отладочный вывод направляется в .
Если этого ключа нет, проверяется существование системной переменной окружения xxx_debuglog, где xxx — имя файла программы без расширения. Для Lazarus это будет lazarus_debuglog. Если такая переменная окружения существует, файл указанный в ней будет использован для вывода отладочных сообщений. Пример: если вы сделаете:
то отладочные сообщения будут выводится в c:lazarusdebug.txt.
Так как это реализовано в lclproc, любое приложение использующее lclproc может использовать этот механизм вывода отладочных сообщений.
Отладка Lazarus-а Наиболее полезно для Windows: Если вы хотите выводить сообщения в консоль, добавьте <$APPTYPE console>в lazarus.pp ; После чего перекомпилируйте Lazarus.
Как мне просмотреть значение свойств?
Вам нужно использовать самую последнюю версию FPC из исходников (2.5.1) или релиз 2.4.0. Любая версия позднее указанных, так же подойдёт.
Если Вы скомпилируете приложение, использую ключ -gw (отладочная информация dwarf), Вы сможете просмотреть значения свойств.
Внимание: это возможно, только для тех свойст, которые напрямую связан с членом класса, директива «read» указывает на переменную, а не метод.
Если свойство возвращает значение через функцию, то достаточно опасно проверять её значение. Риск заключается в том, что для проверки её значения требуется вызвать процедуру или функцию, что может привести к изменению других значений и/или данных. А это значит, что данные изменились в режиме отладки, и дальнейшее исполнение программы, будет отличаться от работы без отладчика.
Проверка свойства по результату функции (как описана выше), ещё не реализована.
Почему отладчик не показывает некоторые переменные или структуры (выдавая ошибки «no such symbol»/»incomplete type»)
Для решения проблем с: — свойствами
— динамическими массивами
— переменными во вложенных процедурах
— «no such symbol in context»
— «incomplete type»
Как я могу проводить отладку компонентов и пакетов FCL с помощью Lazarus
Компоненты и классы FCL скомпилированны по умолчанию без отладночной информации. Как результат — gdb не моэет получить доступ к методам и свойствам этих объектов. Для пересборки компонентов FCL необходимо включить ключ компилятора «-gl» для генерации отладочной информации.
Этот пример предпологает, что у вас Linux дистрибутив с установленным FPC в папке /usr/local/ и вам необходимо включить отладочную информацию для пакета fcl-db. По аналогии с пакетом fcl-db, используемом в данном примере, вы можете применить эти команды для ЛЮБЫХ пакетов, содержащихся в дистрибутиве.
В начале, вам необходимо найти путь к установленному FPC проверив ваш конфигурационный файл FPC. Это файл (fpc.cfg) расположен /etc/fpc.cfg. Просмотрите содержимое fpc.cfg определить папку установки. Обратите внимание на строки, начинающиеся с -Fu в fpc.cfg:
При создании скрипта для установки модулей в папку INSTALL_PATH/lib/fpc/$fpcversion/units/$fpctarget/, вы должны быть уверены, что /usr/local это путь установки FPC, и он должен быть присвоем INSTALL_PREFIX, в противном случае Make-скрипт установи модули в неправильную папку или вообще завершится с ошибкой.
Step 1: Открыть терминал и набрать терминале
Step 2: cd /user/local/share/src/fpc-2.3.1/fpc/fcl-db/
Step 3: sudo make clean all install INSTALL_PREFIX=/usr/local OPT=-gl
Замечание: Параметр INSTALL_PREFIX правильно указан для установки модулей. В примере ниже /usr/local — это путь по умолчанию для fpc в Linux, но он может сильно отличаться в других операционных системах
В конце, после пересборки любого FCL пакета, вам возможно необходимо будет пересобрать LCL.
Contributing / Making Changes to Lazarus
Я создал патч для пристыковки окна сообщений IDE к окну «Редактор исходного кода» (снизу)
Такие патчи не будут приняты, так как они реализуют лишь малую часть требуемой функциональности стыковки (docking). Цель состоит в создании полноценного менеджера стыковки и его использовании. Полноценный менеджер стыковки(dock manager) может соединять все окна и позволяет пользователю определять, как их стыковать (должно ли окно сообщений быть над или под окном кода . или вообще быть отделено от него). К примеру:
Менеджер стыковки может сохранить это расположение и восстановить его при следующем старте. Предпочтительно, если менеджер может работать не только с окнами, но и со страницами редактора кода. Менеджер стыковки не требует использования drag&drop. Все патчи реализующие стыковку без менеджера стыковки усложняют реализацию настоящего менеджера стыковки и потому будут отклонены.
В качестве временного решения можно использовать это расширение IDE: Manual Docker
Я исправил/улучшил Lazarus. Как добавить мои изменения в официальный код Lazarus?
Создайте патч и пришлите его разработчикам. Более подробную информацию смотрите здесь Creating A Patch/ru.
How can I become a Lazarus developer and access management in the SVN and bug-tracker?
First of all: you must learn about Lazarus, to prove your knowledge and skill. Start by reading the wiki articles, read the Lazarus source code, giving a look at the Lazarus Bug-Tracker, fix some bugs, and if you think you are ready, contact the developers on the mailing list.
Где объявлены .
Константы виртуальных клавиш
Константы виртуальных клавиш (VK_UP, VK_ESCAPE и т.д ) объявлены в LCLType. Добавьте LCLtype в uses секцию.
Использование среды разработки
Как я могу использовать «завершение идентификаторов»?
Чтобы вызвать окно завершения идентификатора нажмите [ctrl][space] (по умолчанию для Windows и Linux).
Вы можете настроить автоматическое появление этого окошка в пункте меню Окружение->Редактор->Code Tools->Автоматические функции
Linux
Как выполнить отладку в Linux без IDE?
Прежде всего потребуется отладчик. gdb это стандартный отладчик под линукс, имеющий несколько GUI-интерфейсов. Наиболее распространённый интерфейс — ddd — является частью большинства популярных дистрибутивов. Для компиляции lazarus/lcl с информацией для отладчика вам нужно использовать следующие команды для запуска отладочной сессии:
Однако, следует отметить что ddd не такой удобный как например отладчик Lazarus. Особенно если он используется для просмотра значений имеющихся переменных, учитывая что ddd/gdb регистрозависимы, а Pascal — регистронезависим. Поэтому, чтобы видеть значения переменных, необходимо набирать их имена в верхнем регистре. Для получения более подробной информации обратитесь к fpc-manuals.
I can debug now but ddd does not find my sources or complains that they contain no code. Whats that?
This is a path-related problem with either gdb or ddd. You can avoid this by
- Use the «Change directory» command from the ddd menu and choose the directory where the sources are located. The drawback of this method is that you now can’t use the source of the program you started with (e.g. lazarus). Thus it may be neccessary to change the directory multiple times.
- In ddd goto [Edit] [gdb-settings] and set the search-path
- Create a $(HOME)/.gdbinit file like:
«> I receive an error during the linking that states /usr/bin/ld can’t find -l
which provides , but you also need the development package (rpm, deb), normally called
-dev, which contains the .a (static lib) and/or the .so (dynamic lib). Some distributions have commands to find which package contains a file: Mandriva will list all packages containing the file named lib .so, you’ll have to install those ending in -devel Debian install the apt-file utility (apt-get install apt-file) then will list all packages containing the file named lib .so, you’ll have to install those ending in -dev
Source Based Distributions and Manual Compilation (LFS) Make sure that there is a lib .a in the path, and that it contains the right version. To let the linker find the dynamic library, create a symlink called lib .so to lib -x,y.so if necessary (and/or for static lib; lib .a to lib -x,y.a). FreeBSD As source based distro’s, and also make sure you have -Fl/usr/local/lib in your fpc.cfg and/or Lazarus library path. Keep in mind that GTK1.2 has «gtk12» as package name under FreeBSD. (same for glib) NOTE: This has changed as of late. Newest ports have gtk-12 and glib-12 as well. You might stumble on this problem, since FPC requires the «-less» ones, you will need to symlink them like this: NetBSD As source based distro’s, and also make sure you have -Fl/usr/pkg/lib in your fpc.cfg and/or Lazarus library path
How can I convert a kylix 2 project into a lazarus project?
Nearly the same way as converting a Kylix project into a Delphi/VCL project.
The LCL (Lazarus Component Library) tries to be compatible to Delphi’s VCL. Kylix’s CLX tries to be QT compatible. Here are some general hints:
- Rename all used CLX Q-units like QForms, QControls, QGraphics, . into their VCL counterparts: Forms, Controls, Graphics, .
- Add LResources to the uses section of every form source
- Rename or copy all .xfm files to .lfm files.
- Rename or copy .dpr file to .lpr file.
- Add «Interfaces» to the uses section in the .lpr file.
- Remove <$R *.res>directive
- Remove <$R *.xfm>directive
- Add <$mode objfpc><$H+>or <$mode delphi><$H+>directive to .pas and .lpr files
- Add an initialization section to the end of each form source and add an include directive for the .lrs file (lazarus resource file):
The .lrs files can be created via the lazres tool in: (lazarusdir)/tools/lazres. For example: ./lazres unit1.lrs unit1.lfm
- Fix the differences. The LCL does not yet support every property of the VCL and the CLX is not fully VCL compatible.
- To make it more platform independant, reduce unit libc (which is deprecated) references and substitute with native FPC units like baseunix/unix as much as possible. This will be necessary to support other targets than linux/x86 (including OS X, FreeBSD and Linux/x86_64)
When compiling lazarus the compiler can not find a unit. e.g.: gtkint.pp(17,16) Fatal: Can’t find unit GLIB
1. Check a clean rebuild: do a ‘make clean all’
2. Check if the compiler has the correct version (2.0.4 or higher)
3. Check if the compiler is using the right config file. The normal installation creates /etc/fpc.cfg. But fpc also searches for
/.fpc.cfg, /etc/ppc386.cfg and it uses only the first it finds.
Hint: You can see which config file is used with ‘ppc386 -vt bogus’ Remove any ppc386.cfg as it is really obsolete.
4. Check if the config file (/etc/fpc.cfg) contains the right paths to your fpc libs. There must be three lines like this:
The first part of these paths (/usr/lib/fpc) depends on your system. On some systems this can be for example /usr/local/lib/fpc/. . Hint: You can see your searchpaths with ‘ppc386 -vt bogus’
5. Check that the config file (/etc/fpc.cfg) does not contain search paths to the lcl source files (.pp, .pas):
If you want to add the lcl for all your fpc projects, make sure that the two paths look like the following and are placed after the above fpc lib paths:
6. Check if the missing unit (glib.ppu) exists in your fpc lib directory. For example the gtk.ppu can be found in /usr/lib/fpc/$fpcversion/units/i386-linux/gtk/. If it does not exists, the fpc lib is corrupt and should be reinstalled.
7. Check if the sources are in a NFS mounted directory. In some cases the NFS updates created files incorrectly. Please, try to move the sources into a non NFS directory and compile there.
8. If you are still not succeeded try to use samplecfg script as follows:
# sudo ./samplecfg /usr/lib/fpc/$version /etc
Note! Do not put — / — after etc because if you do that the system will create a file — /etc/fpc.cfg/fpc.cfg. In fact we want that samplecfg make a file — /etc/fpc.cfg — not the folder /etc/fpc.cfg.
I have installed the binary version, but when compiling a simple project, lazarus gives: Fatal: Can’t find unit CONTROLS
Probably you are using a newer fpc package, than that used for building the lazarus binaries. The best solution is to download the sources and compile lazarus manually. You can download the source snapshot or get the source via svn:
Make sure that lazarus get the new source directory: Environment->General Options->Files->Lazarus Directory Top
Lazarus компилируется, но компоновка прерывается с ошибкой: libgdk-pixbuf not found
Для решения проблемы нужно установить библиотеку gdk-pixbuf library для gtk1.x:
Библиотека gdk-pixbuf может быть найдена:
Debian пакет: libgdk-pixbuf-dev
Если вы собираете Lazarus с GTK 2.0 вы можете получить ошибку «libgdk-pixbuf2.0 not found» . Для решения проблемы просто установите пакет libgtk2.0-dev, используя команду apt следующим образом (используйте sudo при необходимости):
Я использую SuSE, при компиляции получаю ошибку: «/usr/bin/ld: cannot find -lgtk Error: Error while linking»
Ранние версии SuSE (до SuSE 11) устанавливали gtk библиотеки devel в директорию /opt/gnome/lib (или /opt/gnome/lib64 для 64-й версии), что не является общепринятым путём для библиотек.
Для решения проблемы, вы можете добавить этот путь библиотеки в конфигурационный файл FPC (/etc/fpc.cfg), следующей строкой:
Лазарус после установки компонента падает с ошибкой runtime error 211
После установки компонента Лазарус падает со следующей ошибкой:
Как это исправить?
Установленный компонент использует потоки. FPC не включает поддержку многопоточности автоматически на *nix системах, по-этому её необходимо включать вручную. Её включение происходит использованием модуля cthreads. Любое приложение, использующее такой компонент должна использовать этот модуль, причём он должен быть первым подключаемым модулем в программе. Лазарус так же не является исключением.
Подключить модуль cthreads можно двумя способами:
1) Откройте пакет. В редакторе пакетов нажмите на Параметры (Options). Во вкладке Использование (Usage) добавьте настройкуПользовательские (custom) и запишите -dUseCThreads. Пересоберите Лазарус. В этом случае модуль cthreads подключиться автоматически для unix систем.
2) Чтобы не изменять пакет, можно добавить директиву компиляци при сборке самого Лазаруса. Откройте меню Сервис(Tools)->Параметры сборки Lazarus(Configure «build Lazarus)». В диалоге Параметры «Cборки Lazarus»(«build Lazarus») в поле «Параметры:»(«Options:») впишите -Facthreads и нажмите кнопку «OK». После этого добавьте пакет и пересоберите среду.
Совет: Предыдущая копия Лазаруса (исполнительный файл, который при запуске на выдавал ошибку), скорее всего, находится в той же папке что и текущая версия, но с расширением .old.
Когда я запускаю программу, использующую потоки (threads), я получаю сообщение об ошибке «runtime error 232»
Полное сообщение выглядит так:
Решение: Добавьте модуль cthreads в секцию uses главного модуля вашей программы (обычно это .lpr-файл).
У меня Ubuntu Breezy/Mandriva KDE3 и шрифты в Lazarus IDE выглядят слишком большими
Попробуйте следующее: Создайте файл с именем «.gtkrc.mine» в домашней директории (если он не существует) и внесите в него данный текст:
Если это не сработает, попробуйте создать ссылку .gtkrc на .gtkrc.mine. Данный способ был опробован в Xubuntu 7.10 и Mandriva 2009.0 KDE3
Примечание: Если Lazarus был скомпилирован с использованием библиотеки Gtk1.2, то настройка шрифтов в Gtk2 не будет влиять на отображение текста в нём.
Как подключать и использовать сторонние файлы ресурсов (*.rc) в GTK приложении?
Вариант 1. Переименуйте файл ресурсов (rc) мой_ресурс.rc в имя_программы.gtkrc и поместите в папку с исполняемым файлом программы.
Вариант 2. Подключите модуль GtkInt в секцию uses исходного кода проекта (*.lpr), и допишите код
перед вызовом Application.Initialize.
Вариант 3. Используя модуль gtk2 вызовите метод gtk_rc_parse(‘имя_файла_ресурса’) а также gtk_rc_reparse_all.
I have Ubuntu and I cannot compile for Gtk2 due to missing libraries
Ubuntu has a problem with not creating all the symbolic links that you’ll need even when the libraries are installed. Make sure that all missing libraries when trying to link for Gtk2 have their appropriate links. For instance, you might need to do:
Make sure that the [whatever].so symbolic links are created and point to the actual libraries.
How can I compile a program for Gtk2?
At the moment, the Gtk2 compiled IDE is a little unstable, but you can compile software for Gtk2 using the Gtk1 IDE.
To start with recompile LCL for Gtk2. Go to the menu «Tools»->»Configure Build Lazarus» and set LCL to clean+build and everything else to none.
Now click Ok and go to the menu «Tools»->»Build Lazarus»
Now you can compile your software with Gtk2 going on the Compiler options and changing the widgetset to Gtk2.
I get this message: «[WARNING] ** Multibyte character encodings (like UTF8) are not supported at the moment.»
Since revision 10535 (0.9.21) this message doesn’t exist anymore. Previously it was used to warn that a UTF-8 encoding was used. The internal keyhandling routines for the gtk1 widgetset couldn’t handle such encoding for keypresses, with the result that keypresses with for instance accented chars were not or wrong detected.
(original text for older versions of lazarus)
This warning message indicates that your locale enconding is set to utf-8. If you are using Gtk 1 this can be a serious problem and prevent the correct working of Lazarus or software created with Lazarus.
To work around this, just change your locale to a non utf-8 before executing the program on the command line, like this:
Substitute pt_BR with the locale for your country. You can create a script to automate this.
Windows
&_was_unexpected_at_this_time.»> When I cycle the compiler, I get:The name specified is not recognized as an internal or external command, operable program or batch file.>& was unexpected at this time.
In the compiler directory there is an OS2 scriptfile named make.cmd. Different versions of Windows also see this as a script file, so remove it since what is needed for OS2 becomes a hindrance on Windows.
When I cycle the compiler, I get: make[3]: ./ppc1.exe: Command not found
I don’t know why but somehow make has lost its path. Try to cycle with a basedir set like: make cycle BASEDIR=your_fpc_source_dir_herecompiler
When I try to make Lazarus I get:
make.exe: * * * interfaces: No such file or directory (ENOENT). Stop.make.exe: * * * [interfaces_all] Error 2
You need to upgrade your make.
makefile:27: *** You need the GNU utils package to use this Makefile. Stop.
Make sure you didn’t install FPC in a path with spaces in the name. The Makefile doesn’t support it.
How can I give my program an XP look like lazarus has?
Project -> Project Options -> Check ‘Use manifest to enables themes’.
Когда я запускаю Windows программу, созданную в Lazarus-е, открывается консольное (DOS) окно
Укажите параметр -WG (Windows графическое приложение) в командной строке компилятора или установите флажок
Mac OS X
Why does compiling a project fail with ‘unknown section attribute: no_dead_strip’?
Dead code stripping is not supported by the assembler and linker before Xcode 1.5 (available for Mac OS X 10.3.9). Disable the compiler options
- Code > Unit style > Smart linkable (-CX)
- and Linking > Link Style > Link smart (-XX)
Лицензирование
Могу ли я создавать коммерческие приложения, используя Lazarus?
Да, библиотека LCL разрабатывается под лицензией LGPL, что позволяет использовать её без открытия кода вашего приложения. Однако, модификации и расширения LCL должны распространяться с исходным кодом. Сам Lazarus, как IDE, использует лицензию GPL. Отметим, что LCL — это код, содержащийся в файлах из каталога «lcl», прочий код не подпадает под действие указанной лицензии.
Могу ли использовать в коммерческих приложениях дополнительные компоненты Lazarus?
В составе Lazarus есть дополнительные компоненты, разработанные участниками сообщества. Некоторые из этих компонентов распространяются под лицензиями, отличными от лицензии самого Lazarus. Если вы используете такие компоненты, вы должны уточнить их лицензию. Обычно необходимое пояснение приводится в исходном коде файлов соответствующего пакета. Большинство дополнительных компонентов от сторонних разработчиков можно найти в подкаталоге «components» основного каталога Lazarus.
Как я могу узнать, что компонент является частью LCL?
Все модули LCL размещаются в подкаталоге «lcl». Также доступен список модулей, входящих в LCL. Если в вашем коде вызываются модули, которых нет в этом списке, вероятно, вы используете компонент, не являющийся частью LCL.
Могу ли я создавать коммерческие плагины для Lazarus?
Да, the IDEIntf part of the IDE is licensed under the LGPL with the same exception, so that shared data structures in this part will not force you to license your plug-in or design-time package under the GPL. You are free to choose a plug-in of any license; we don’t want to limit your choice. Therefore non-GPL compatible plug-ins are allowed. Note that it’s not allowed to distribute a precompiled Lazarus with these non-GPL-compatible plugins included statically; however, we do not see this as a severe limitation, since recompiling Lazarus is easy.
Источник
My program exits with RunError(5), which would suggest that it can’t access the file, which it should be able to. I have checked and the file is used as it should be, the file isn’t read-only, etc. What the program does is, it creates a .dat file if one doesn’t exists and uses it for saving stuff. If I run the program and the file doesn’t exist, the file is created, but after that, in the same execution, the program won’t access the file. This ONLY happens if the file was created in the current execution.
This is the way in which the procedures are called(the code is quite long but I am giving you the first few lines, where the error occurs):
fileName := 'labSave.dat';
CreateFile;
assign(labyrinthFile,fileName);
writeln(CheckFileSize);
and then there is each of the procedures:
procedure Initialize;
begin
fileName := 'labSave.dat';
assign(labyrinthFile,fileName);
end;
procedure CreateFile;
begin
if not FileExists(fileName) then FileCreate(fileName);
end;
function CheckFileSize: integer;
begin
reset(labyrinthFile);
CheckFileSize := FileSize(labyrinthFile);
close(labyrinthFile);
end;
Подскажите в чём проблема….
Модератор: Модераторы
Подскажите в чём проблема….
Написал программу на Free Pascal в Linux OpenSUSE 11.3 которая должна отобразить окно с рисунком. На Windows XP запускаю на Free Pascal, работает. А в Линуксе пишет ошибку постоянно — [ GetMax.pas(25,1) Error: Can’t create object file: /home/otto/TP_7/GetMax.o ]. Кинул в папку и настройки (graph.o; graph.ppu), всё равно ошибку выдаёт. Вот сама программа:
- Код: Выделить всё
Program GetMax;
Uses
Crt,
Graph; {Podkly4enie modulya biblioteke grafi4eskix procedur}
var
GraphDriver, {peremennaya, opredelyayhyaa tip driver}
GraphMode {peremennaya, zadauhya re)/(im raboti graf driver}
:integer;Begin
ClrScr;
GraphDriver := detect; {avtoopredelenie tipa drivera}
InitGraph (GraphDriver, GraphMode, ''); {Inicializaciya graf re)/(ima}writeLn('x=',GetMaxX(),'y=',GetMaxY());
PutPixel(10,10,red);SetColor(4);
Line(10,10,150,150);
{s etogo momenta vse graf sredstva dostupni programmistu}
{telo programmi}ReadLn;
CloseGraph; {zakritie graf re)/(ima}
End.
Подскажите что делать, программа должна создать окно с рисунком, и второе окно текстовое с разрешение экрана.
- Вложения
-
GetMax.pas.tar.gz
- Архив с исходником и настройками графики
- (56.46 КБ) Скачиваний: 368
- Otto
- незнакомец
- Сообщения: 6
- Зарегистрирован: 02.08.2010 16:56:06
Re: Подскажите в чём проблема….
Odyssey » 02.08.2010 18:48:43
Ошибка «Can’t create object file» скорее всего связана не с кодом программы, а с доступом к файловой системе.
1) Проверьте, существует ли файл /home/otto/TP_7/GetMax.o, если да — удалите его
2) Проверьте ваши права доступа к директории /home/otto/TP_7/
3) Проверьте, не использует ли какая-нибудь другая программа этот файл (радикальный способ — перезагрузитесь, после чего откройте FPC IDE или Lazarus IDE, в IDE откройте файл GetMax.pas и попробуйте его скомпилировать)
4) Если работаете в Lazarus IDE — попробуйте отключить отладчик.
- Odyssey
- энтузиаст
- Сообщения: 580
- Зарегистрирован: 29.11.2007 17:32:24
Re: Подскажите в чём проблема….
Otto » 02.08.2010 20:10:40
А как сделать права доступа? Пробовал и из по root заходить. Не помогает не чего. Всё равно ошибку выдаёт. Разтолкуйте как что делать……
Пробовал делать как в этих пунктах выше, не помогло.
- Otto
- незнакомец
- Сообщения: 6
- Зарегистрирован: 02.08.2010 16:56:06
Re: Подскажите в чём проблема….
VirtUX » 02.08.2010 20:15:12
Otto писал(а):А как сделать права доступа?
под root’ом:
- Код: Выделить всё
chmod -R 777 /home/otto/TP_7
-
VirtUX - энтузиаст
- Сообщения: 878
- Зарегистрирован: 05.02.2008 10:52:19
- Откуда: Крым, Алушта
Re: Подскажите в чём проблема….
Otto » 02.08.2010 22:58:29
Пробовал по разному. Суть проблемы скорее всего с графикой….. Выдаёт ошибку постоянно:
/usr/bin/ld: cannot find -lvga.
— при попытки компелирования в среде программирования Geany.
В Fpee Pascal выдаёт ошибку:
GetMax.pas(25,1) Error: Can’t create object file: /home/otto/TP_7/GetMax.o
Пробовал разные методы, но всё счетно. Может кто знает как исправить ошибку. Посоветовали на ваш сайт зайти попросить помощи….. )))
- Otto
- незнакомец
- Сообщения: 6
- Зарегистрирован: 02.08.2010 16:56:06
Re: Подскажите в чём проблема….
Otto » 03.08.2010 10:39:35
Нашёл и скачал библиотеку aalib-1.4.0-483.1.i586.rpm, именно libvga не нашёл где скачать. Это та библиотека?
Потому, что не помогло
- Вложения
-
aalib-1.4.0-483.1.i586.rpm.tar.gz
- (113.92 КБ) Скачиваний: 362
- Otto
- незнакомец
- Сообщения: 6
- Зарегистрирован: 02.08.2010 16:56:06
Re: Подскажите в чём проблема….
Padre_Mortius » 03.08.2010 17:27:49
Иван Шихалев писал(а):Не установлена библиотека libvga.
Я бы все-таки сказал, что не найден файл libvga.so
Для начала стоит сделать поиск на компьютере в поисках библиотеки libvga.so.x.x.x (где x — может быть любым числом). Поиск осуществляется при помощи команды locate. В данном случае
- Код: Выделить всё
locate libvga
Перед выполнением поиска желательно выполнить updatedb от имени пользователя root. Если locate нашел файл libvga.so.x.x.x.x, то нужно сделать символическую ссылку
- Код: Выделить всё
ln -s {директория файла libvga.so.x.x.x}/libvga.so.x.x.x {директория файла libvga.so.x.x.x}/libvga.so
Если locate ничего не нашел, то ищем пакет в поисковике
Добавлено спустя 3 минуты 42 секунды:
Или сразу искать devel-пакет
P.S. исправился
Последний раз редактировалось Padre_Mortius 06.08.2010 12:07:25, всего редактировалось 1 раз.
- Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Re: Подскажите в чём проблема….
Otto » 05.08.2010 21:59:50
Не помогает блин
- Otto
- незнакомец
- Сообщения: 6
- Зарегистрирован: 02.08.2010 16:56:06
Re: Подскажите в чём проблема….
v-t-l » 06.08.2010 11:08:55
Padre_Mortius писал(а):Я бы все-таки сказал, что не найден файл libsvga.so
Для начала стоит сделать поиск на компьютере в поисках библиотеки libsvga.so.x.x.x (где x — может быть любым числом). Поиск осуществляется при помощи команды locate. В данном случае
- Код: Выделить всё
locate libsvga
только не libsvga, а libvga.
2 Otto — возможно поэтому и «не помогает»
- v-t-l
- энтузиаст
- Сообщения: 717
- Зарегистрирован: 13.05.2007 16:27:22
- Откуда: Belarus
Re: Подскажите в чём проблема….
Padre_Mortius » 06.08.2010 11:48:43
v-t-l
опечатался) главное смысл понять, а не тупое перебивание буковок
- Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Re: Подскажите в чём проблема….
Otto » 07.08.2010 18:02:43
Да блин, не работает эта команда. Постоянно выдаёт:
linux-tntr:/home/otto # locate libvga
If ‘locate’ is not a typo you can use command-not-found to lookup the package that contains it, like this:
cnf locate
и всё! Поэтому не получается.
- Otto
- незнакомец
- Сообщения: 6
- Зарегистрирован: 02.08.2010 16:56:06
Re: Подскажите в чём проблема….
Kitayets » 10.08.2010 12:09:02
у тебя locate не установлена
попробуй так:
find / -name ‘libvga.so*’
- Kitayets
- постоялец
- Сообщения: 169
- Зарегистрирован: 05.05.2010 21:15:24
Вернуться в Общее
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
I am getting an error code 5 when I try to compile an application: «can’t create object file». This is at compile time.
Sent from my iPhone
—
On Tue, 12 Dec 2017 16:30:14 -0500
Post by Larry Dalton via Lazarus
I am getting an error code 5 when I try to compile an application: «can’t create object file». This is at compile time.
Have you read this thread?
http://forum.lazarus.freepascal.org/index.php?topic=8167.0
Mattias
—
Thanks! The re-boot cleared it.
Sent from my iPhone
Post by Mattias Gaertner via Lazarus
On Tue, 12 Dec 2017 16:30:14 -0500
Post by Larry Dalton via Lazarus
I am getting an error code 5 when I try to compile an application: «can’t create object file». This is at compile time.
Have you read this thread?
http://forum.lazarus.freepascal.org/index.php?topic=8167.0
Mattias
—
_______________________________________________
Lazarus mailing list
https://lists.lazarus-ide.org/listinfo/lazarus
—
Сообщения без ответов | Активные темы
Автор | Сообщение |
---|---|
Заголовок сообщения: lazarus под linux
|
|
|
Попробовал под Ubuntu. Кто то устанавливал ? Сначала ругается на на ehlibLCL после смены регистра символов в имени файла , начинает ругаться на winutils что его нет и тут ничего не помогает… |
Вернуться наверх |
|
jsa |
Заголовок сообщения: Re: lazarus под linux
|
|
Присоединяюсь к вопросу. |
Вернуться наверх |
|
jsa |
Заголовок сообщения: Re: lazarus под linux
|
|
Скажите что-нибудь, пожалуйста. |
Вернуться наверх |
|
jsa |
Заголовок сообщения: Re: lazarus под linux
|
|
Скажите пожалуйста, |
Вернуться наверх |
|
EhLibSupport |
Заголовок сообщения: Re: lazarus под linux
|
|
Добрый день. Текущую версию библиотеки 9.2 не удастся установить под Lazarus на Linux. support@ehlib.com , _________________ |
Вернуться наверх |
|
jsa |
Заголовок сообщения: Re: lazarus под linux
|
|
Большое спасибо за ответ. P.S. Опыт пока очень маленький. В остальном нет никакой разницы, один и тот же проект без проблем компилируется в обеих осях и работает. |
Вернуться наверх |
|
jsa |
Заголовок сообщения: Re: lazarus под linux
|
|
Добрался до установки EhLib9.3 Сразу натыкаюсь на ошибку отсутствия DBUtilsEh.pas Надо внимательно собирать, в Linux это разные имена файлов |
Вернуться наверх |
|
jsa |
Заголовок сообщения: Re: lazarus под linux
|
|
После исправления имени файла, установка пошла, но вылетела с такими ошибками Код: Сборка IDE: Код завершения 512, ошибок: 2 Запустил с правами админа в терминале |
Вернуться наверх |
|
jsa |
Заголовок сообщения: Re: lazarus под linux
|
|
В общем с sudo оказывается всё получилось. Просто перезапуск IDE не срабатывает как в винде. |
Вернуться наверх |
|
EhLibSupport |
Заголовок сообщения: Re: lazarus под linux
|
|
Добрый день. Цитата: Добрался до установки EhLib9.3 Сразу натыкаюсь на ошибку отсутствия DBUtilsEh.pas Напишите, пожалуйста, точнее, в каком файле присутствует некорректное название файле DbUtilsEh. _________________ |
Вернуться наверх |
|
jsa |
Заголовок сообщения: Re: lazarus под linux
|
||
|
Не так «в каком файле присутствует некорректное название файле DbUtilsEh.»
|
||
Вернуться наверх |
|
||
EhLibSupport |
Заголовок сообщения: Re: lazarus под linux
|
|
Добрый день. Проблема с модулем DbUtilsEh действительно присутствует. _________________ |
Вернуться наверх |
|
jsa |
Заголовок сообщения: Re: lazarus под linux
|
|
Привожу пример различий отображения грида в Win8.1 и в Linux Mint Mate 19.1 1. VertScrollBar.Width=30 в винде отображается нормально, а в линуксе место под бегунок правильного размера, а сам бегунок остается узким/системным. |
Вернуться наверх |
|
Кто сейчас на форуме |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
Сообщение об ошибке указывает, что объектный файл не может быть создан, что приводит к тому, что приложение не создается. Код ошибки 5 означает отказ в доступе, что означает, что вы не имеете права на запись в каталог, в котором компилятор и компоновщик пытаются сохранить вывод, или исполняемый файл используется и не может быть заменен (возможно, антивирусным программным обеспечением), или он был сделан только для чтения.
Если проблема связана с правами, решение должно либо получить достаточные права на каталог, либо изменить путь вывода проекта к каталогу, в котором у вас есть достаточные права. Обычно это делается в Project-> «Параметры» в главном меню.
Если это связано с антивирусным программным обеспечением или другим процессом, использующим исполняемый файл, отключите программное обеспечение AV или предоставите правило исключения, которое предотвращает сканирование этой папки.
Если проблема вызвана тем, что файл доступен только для чтения, измените атрибуты файла, чтобы удалить этот атрибут.
Programming newbies or people, who start with developing applications using the Lazarus IDE, may be irritated by some error messages, being displayed
during the build or the execution of a program. Might this little text be helpful to understand, what’s wrong and how to solve the issue.
Message | Occurrence | Explanation |
---|---|---|
Error: Can’t create object file: FILENAME (error code: 5). Error: Can’t create executable FILENAME. | Build error |
The object and executable of the program to be build can’t be created, because Lazarus can’t write the file. On Linux, this could have to do with file or directory access permissions. Usually, the reason is a very simple one: You are trying to rebuild a program, that is actually being executed. |
Hint: Variable ARRAY-VARIABLE of a managed type does not seem to be initialized. | Build warning |
This message occurs, if you set the initial length of a dynamic array (for example: SetLength(ARRAY-VARIABLE, 0). For me personally, this message is nonsense: How could you initialize a dynamic array, before setting its length? Most people, posting in the Lazarus forums, seem to share my opinion. Another argument, that this hint may safely be ignored, is that with Lazarus versions 1.x, this never happened. |
Project PROJECTNAME raised exception class ‘External: SIGSEGV’. At address ADDRESS. | Run-time error |
There was some error in an external module, called by the program. This usually happens, if some variable has a value, that is invalid for a given function called. The problem with these errors is, that Lazarus usually doesn’t indicate the line in the source code, where the error occurred. Finding these errors may thus be heavy (I never used the debugger; would this be the solution, to quickly find the error?). According to my own experience, one of the most frequent reasons is an array index, that is out of the permitted limits, writing some code like for I := 0 to Length (ARRAY-Variable) do. The error may also be caused by invalid arguments of a mathematical function, such as negative values, in the case of an external calculation of a square root. |
If you find this text helpful, please, support me and this website by signing my guestbook.