Сборка с помощью UniLink

Тема в разделе "WASM.BEGINNERS", создана пользователем lomomike, 2 май 2008.

  1. lomomike

    lomomike New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2008
    Сообщения:
    29
    Все доброво времени суток.

    У меня небольшая пробдема.
    Есть следующий простой код
    Код (Text):
    1. .486
    2. .model flat, stdcall
    3. .data
    4. .code
    5. start proc near
    6.     ret
    7. start endp
    8. end start
    Если я его компилирую с помощью ml и собираю с помощью link.exe, то exe-шник появляется без проблем
    Код (Text):
    1. \masm32\bin\ml /c /coff test.asm
    2. \masm32\bin\link /SUBSYSTEM:CONSOLE test.obj
    Если же попробовать скомпоновать полученный объектный файл Unilink'ом,
    то появляется следующая ошибка
    Пробовал и в ручную указывать точку входа программу - результат тот же

    Никто не может объяснить в чем проблема? Я так полагаю, что я что-то не так делаю, а вот что не пойму.
    Подскажите пожалуйста
    Заранее большое спасибо
     
  2. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Попробуй добавить в test.asm
    Код (Text):
    1. public start
     
  3. lomomike

    lomomike New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2008
    Сообщения:
    29
    Пробовал, результат тот же
     
  4. deadly83

    deadly83 New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2007
    Сообщения:
    71
    добавь start PROTO
    если не поможет обзови процедуру start1
     
  5. lomomike

    lomomike New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2008
    Сообщения:
    29
    Попробовал и то, и то.
    Результат к сожалению нулевой пока что.
     
  6. deadly83

    deadly83 New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2007
    Сообщения:
    71
    Код:
    .486
    .model flat, stdcall
    start1 PROTO
    .data
    .code
    start:
    start1 proc
    ret
    start1 endp
    end start
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    lomomike
    Причина в stdcall - к именам добавляется подчеркивание и @<число аргументов>
    Масмовый линкер это учитывает. Как быть тебе - решай сам. Можно либо задать точку входа,
    если позволяется @ или в определении start задать pascal или вообще выбрать это в .model
     
  8. lomomike

    lomomike New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2008
    Сообщения:
    29
    deadly83
    Скомпилировал твой код
    Результат не изменился
     
  9. lomomike

    lomomike New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2008
    Сообщения:
    29
    valterg
    Спасибо, все собралось
     
  10. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    lomomike
    Но учти, если будешь использовать .model pascal то вызовы библиотечных функций могут не работать
    или дадут неразрешенные ссылки. Правда я это не проверял. В Фортране в похожей ситуации - все нормально, т.к. МС библы содержат переходники. Правда там тип не pascal, а C refrence.
     
  11. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    С унилинком не работал. Но было нечто подобное с влинком. Надо посмотреть как манглятся имена точно. Разные компилеры в разных режимах делают это по разному. Для этого достаточно посмотреть объектник в текстовом режиме. Бывает, что при сшивании объектников/либ от разных компилеров приходится переименовывать функции. Во влинке это делается достаточно просто.

    А использовать раскаль вместо стдкал-а.. Не знаю. ИМХО могут вылезти проблемы. И при
    и при склейке с инородными языками/средами. Хотя я тоже это не проверял.
     
  12. lomomike

    lomomike New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2008
    Сообщения:
    29
    Я паскаль и не стал использовать,
    оказалось надо было точку входа вручную прописать, а я не учел то, о чем valterg говорил про подчеркивание и @ и следовательно имя неправильно прописывал
     
  13. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Некоторые компилеры '_' ставят сдругой стороны, некоторые не ставят вообще. Некоторые компилеры в стдкалл конвенции не ставят цифер после '@', некоторые не добавляют и сам '@'. Если вы собираетесь всю жизнь писать под MSVC то это одно дело. Однако если вам любопытны и другие инструменты стоит смотреть как что манглится.
     
  14. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    _basmp_
    Есть простой способ : глядим в .obj - там эта метка сидит.
     
  15. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    valterg
    Ну, а я не то-же писал (пост №11)?