1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Указать настройки Cmake для х64

Тема в разделе "WASM.SOFTWARE", создана пользователем M0rg0t, 31 дек 2020.

  1. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.053
    njeen,
    Манглинг ничего не значит. Можешь делать stdcall-функции без манглинга или cdecl с proc@4. Соглашение о вызове будет определяться хидером, который будет использовать клиент, а имя импортируемого символа будет в lib-файле (такое же, которое ты создашь для экспорта).

    M0rg0t,
    Просто добавляй def к списку входных файлов в add_library().
     
  2. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    129
    Адрес:
    Ташлинск
    rmn>
    Да конечно можно так сделать. Но в норме по-разному декорированные имена означают разные соглашения вызова.
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.053
    njeen,
    Основное назначение манглинга - обеспечить возможность полиморфизма и пространств имен на хайлевелах. Соглашение о вызовах по имени не определяется нигде и никогда, это просто сайдэффект, которым пользоваться не нужно (и полагаться на него тоже).
     
  4. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.260
    Не получается, пишу add_library(exports.def)
    пишет ошибку.

    njeen, через флаги линкера вышло, хз правильно это или нет (там выше задаются другие флаги), сделал примерно так
    Код (Text):
    1. foreach(FILE ${EXE};${DLL})
    2.     set(NEW_PRJ_NAME ${PROJECT_NAME}_${FILE})
    3.  
    4.     if(${FILE} STREQUAL ${DLL})
    5.         #set_source_files_properties(exports.def PROPERTIES HEADER_FILE_ONLY TRUE)
    6.         add_library(${NEW_PRJ_NAME} SHARED ${ALL_FILES} ${CFG_FILES})
    7.         set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}  /def:${CMAKE_CURRENT_SOURCE_DIR}/exports.def")
    8. ...
     
  5. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    129
    Адрес:
    Ташлинск
    Так это
    Код (Text):
    1.  
    2. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}  /def:${CMAKE_CURRENT_SOURCE_DIR}/exports.def"
    3.  
    Не заменяет ранее установленные флаги, а добавляет к имеющимся.

    Правда, не понимаю, зачем вообще тут цикл - разве что один cmake файл собирает несколько target'ов.
     
    M0rg0t нравится это.
  6. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.260
    да, все верно.