Автор Тема: [Oberon-07M] Порядок компоновки.  (Прочитано 12299 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
[Oberon-07M] Порядок компоновки.
« : Апрель 10, 2011, 01:16:26 pm »
Сейчас в prj файле содержится вот такая вот магия:
Console
WinApi
Kernel
Console
Sample1
Exit
Внимание вопрос -- зачем тут два раза Console? Собственно вопрос в том, зачем тут самый верхний Console?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:[Oberon-07M] Порядок компоновки.
« Ответ #1 : Апрель 10, 2011, 01:22:05 pm »
Да, и если этот лишний console убрать, то вылазят внезапно какие-то левые ошибки компоновки:
Module WinApi not found
Module WinApi not found
Module WinApi not found
Хотя он совершенно успешно был скомпилирован до того, и obj c sym'ом лежат там где нужно.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Rifat

  • Jr. Member
  • **
  • Сообщений: 62
    • Просмотр профиля
Re:[Oberon-07M] Порядок компоновки.
« Ответ #2 : Апрель 10, 2011, 01:32:42 pm »
Почитайте 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.

То есть первая строка, это не имя модуля.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:[Oberon-07M] Порядок компоновки.
« Ответ #3 : Апрель 10, 2011, 01:39:14 pm »
Хм. В зависимости от режима идет (динамическая?) компоновка с разным набором виндовых библиотек?

Почему бы это не сделать явным образом?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Rifat

  • Jr. Member
  • **
  • Сообщений: 62
    • Просмотр профиля
Re:[Oberon-07M] Порядок компоновки.
« Ответ #4 : Апрель 10, 2011, 01:46:01 pm »
Нет, вы не поняли. В заголовке бинарного файла есть поле, которое показывает данный бинарный файл консольный или оконный (находится по смешению 5Ch от начала PE заголовка, там хранится число 2 или 3).
Если, например, указать что приложение оконное, а на самом деле, оно пытается выводить что-то в консоль, то можно наблюдать определенные глюки, некоторые WinApi функции будут при этом возвращать код ошибки, и консольное приложение будет работать неправильно. 

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:[Oberon-07M] Порядок компоновки.
« Ответ #5 : Апрель 10, 2011, 01:47:15 pm »
Нет, вы не поняли. В заголовке бинарного файла есть поле, которое показывает данный бинарный файл консольный или оконный (находится по смешению 5Ch от начала PE заголовка, там хранится число 2 или 3).
Если, например, указать что приложение оконное, а на самом деле, оно пытается выводить что-то в консоль, то можно наблюдать определенные глюки, некоторые WinApi функции будут при этом возвращать код ошибки, и консольное приложение будет работать неправильно. 

Не понял. У меня никогда небыло проблем с созданием консоли и выводом в нее из гуишных приложений. Win32 API.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Rifat

  • Jr. Member
  • **
  • Сообщений: 62
    • Просмотр профиля
Re:[Oberon-07M] Порядок компоновки.
« Ответ #6 : Апрель 10, 2011, 01:52:03 pm »
А у меня были :)
Проблема была не в том, что консольное приложение совсем ничего не выводило, а в том, что при попытке перенаправления вывода от консольной программы в файл, то файл был пустым.
Возможно, этот глюк проявляться только на некоторых версиях Windows, возможно, что если у вас другая версия Windows или SP, то вам повезёт и данный глюк не проявится. В любом случае, для каких-то целей это поле в бинарном файле нужно и лучше там указывать правильное значение.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:[Oberon-07M] Порядок компоновки.
« Ответ #7 : Апрель 10, 2011, 01:54:55 pm »
А у меня были :)
Проблема была не в том, что консольное приложение совсем ничего не выводило, а в том, что при попытке перенаправления вывода от консольной программы в файл, то файл был пустым.
Возможно, этот глюк проявляться только на некоторых версиях Windows, возможно, что если у вас другая версия Windows или SP, то вам повезёт и данный глюк не проявится. В любом случае, для каких-то целей это поле в бинарном файле нужно и лучше там указывать правильное значение.

Дык это наверняка была проблема с наследованием ввода-вывода родительской консоли. А с этой самой консолью нет проблем ни у нас на машинах разработчиков, ни у клиентов :-) Как понимаешь, версий виндов там полный зоопарк.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:[Oberon-07M] Порядок компоновки.
« Ответ #8 : Апрель 10, 2011, 02:14:18 pm »
Вообще, по компилятору и компоновщику пожелание, чтобы они таки научились выдавать help по --help, или /? . Ну и версию до кучи, по /V --version. То есть как ими пользоваться.

Также очень удобно было бы если бы компоновщик умел бы принимать список файлов в виде параметров командной строки, а не в виде магического файла.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Rifat

  • Jr. Member
  • **
  • Сообщений: 62
    • Просмотр профиля
Re:[Oberon-07M] Порядок компоновки.
« Ответ #9 : Апрель 10, 2011, 02:18:17 pm »
Пожелание учту.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:[Oberon-07M] Порядок компоновки.
« Ответ #10 : Апрель 10, 2011, 04:03:57 pm »
Кстати, при попытке скормить компоновщику 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 в аттаче.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"