Oberon space
General Category => Общий раздел => Тема начата: valexey от Апрель 10, 2011, 01:16:26 pm
-
Сейчас в prj файле содержится вот такая вот магия:
Console
WinApi
Kernel
Console
Sample1
Exit
Внимание вопрос -- зачем тут два раза Console? Собственно вопрос в том, зачем тут самый верхний Console?
-
Да, и если этот лишний console убрать, то вылазят внезапно какие-то левые ошибки компоновки:
Module WinApi not found
Module WinApi not found
Module WinApi not found
Хотя он совершенно успешно был скомпилирован до того, и obj c sym'ом лежат там где нужно.
-
Почитайте http://exaprog.com/userguide.pdf
Там написано:
linker.exe projectfile binaryfile
projectfile is file which contains “console” or “window” in the first line for
building console or gui application. Following lines in project file should contain
modules names in order, which they are initialized.
То есть первая строка, это не имя модуля.
-
Хм. В зависимости от режима идет (динамическая?) компоновка с разным набором виндовых библиотек?
Почему бы это не сделать явным образом?
-
Нет, вы не поняли. В заголовке бинарного файла есть поле, которое показывает данный бинарный файл консольный или оконный (находится по смешению 5Ch от начала PE заголовка, там хранится число 2 или 3).
Если, например, указать что приложение оконное, а на самом деле, оно пытается выводить что-то в консоль, то можно наблюдать определенные глюки, некоторые WinApi функции будут при этом возвращать код ошибки, и консольное приложение будет работать неправильно.
-
Нет, вы не поняли. В заголовке бинарного файла есть поле, которое показывает данный бинарный файл консольный или оконный (находится по смешению 5Ch от начала PE заголовка, там хранится число 2 или 3).
Если, например, указать что приложение оконное, а на самом деле, оно пытается выводить что-то в консоль, то можно наблюдать определенные глюки, некоторые WinApi функции будут при этом возвращать код ошибки, и консольное приложение будет работать неправильно.
Не понял. У меня никогда небыло проблем с созданием консоли и выводом в нее из гуишных приложений. Win32 API.
-
А у меня были :)
Проблема была не в том, что консольное приложение совсем ничего не выводило, а в том, что при попытке перенаправления вывода от консольной программы в файл, то файл был пустым.
Возможно, этот глюк проявляться только на некоторых версиях Windows, возможно, что если у вас другая версия Windows или SP, то вам повезёт и данный глюк не проявится. В любом случае, для каких-то целей это поле в бинарном файле нужно и лучше там указывать правильное значение.
-
А у меня были :)
Проблема была не в том, что консольное приложение совсем ничего не выводило, а в том, что при попытке перенаправления вывода от консольной программы в файл, то файл был пустым.
Возможно, этот глюк проявляться только на некоторых версиях Windows, возможно, что если у вас другая версия Windows или SP, то вам повезёт и данный глюк не проявится. В любом случае, для каких-то целей это поле в бинарном файле нужно и лучше там указывать правильное значение.
Дык это наверняка была проблема с наследованием ввода-вывода родительской консоли. А с этой самой консолью нет проблем ни у нас на машинах разработчиков, ни у клиентов :-) Как понимаешь, версий виндов там полный зоопарк.
-
Вообще, по компилятору и компоновщику пожелание, чтобы они таки научились выдавать help по --help, или /? . Ну и версию до кучи, по /V --version. То есть как ими пользоваться.
Также очень удобно было бы если бы компоновщик умел бы принимать список файлов в виде параметров командной строки, а не в виде магического файла.
-
Пожелание учту.
-
Кстати, при попытке скормить компоновщику prj файл находящийся в подкаталоге, компоновщик упал.
>..\\Bin\\linker.exe obj\\sample1.prj sample1.exe
Can not open file WinApi.obj
Can not open file Console.obj
Can not open file Kernel.obj
Can not open file Sample1.obj
Can not open file Exit.obj
error.log в аттаче.