Важная информация
Показано с 1 по 3 из 3

Тема: Как пользоваться dlltool.exe из mingw64?

  1. #1 Как пользоваться dlltool.exe из mingw64? 
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Как пользоваться dlltool.exe из mingw64? Есть сама библиотека, dlltool.exe, компилятор, среда и заголовочный файл, требуется получить файл с расширением .a, чтоб его слинковать статически и потом юзать библиотечные функции.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 248 раз(а) в 164 сообщениях
    Вот тут пишут про это: [Ссылки могут видеть только зарегистрированные пользователи. ]:

    gcc надо передать параметр "-Wl,--out-implib,lib[library name].a"

    z:\Users\mpayne\Documents\MinGWDLL>gcc -c -o add.o add.c -D ADD_EXPORTS

    z:\Users\mpayne\Documents\MinGWDLL>gcc -o add.dll add.o -s -shared -Wl,--subsystem,windows,--out-implib,libadd.a
    Creating library file: libadd.a
    Тут видно, что кроме библиотеки нужен объектный файл, но если есть исходники - то собрать его не проблема (при сборке dll он получается тоже).

    Ну а если нет объектного файла - то да, надо пользоваться dlltool (по крайней мере я другого пути не знаю). Но dlltool нужен .def файл - оно вообще .def файл преобразует в .a (дальше из [Ссылки могут видеть только зарегистрированные пользователи. ]):
    dlltool -d somedll.def -l libsomedll.a
    Я не пробовал создавать такой файл вручную, но все в той же документации пишут что он должен выглядеть так:
    LIBRARY SOMEDLL.DLL
    EXPORT
    <list of external names, one per line>
    Там есть пример:
    LIBRARY Diverg01.dll
    EXPORTS
    Divergences
    LTDivergences
    STDivergences
    Но мне кажется, что это не всегда так просто выглядит, т.к. скорее всего имена функций должны быть манглированными (ведь возможны несколько функций с одним именем и разными параметрами, так какую из них мы экспортируем если так напишем?), но и без этого для вызова функции одного имени всегда мало. Как вручную записывать этот мангл я не знаю (в примере с документации, мне кажется, все экспортируемые функции без параметров).
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  3. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (28.01.2016), FelixMacintosh (28.01.2016), Free Admin (28.01.2016)

  4. #3  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Цитата Сообщение от rrrFer Посмотреть сообщение
    gcc надо передать параметр "-Wl,--out-implib,lib[library name].a"

    z:\Users\mpayne\Documents\MinGWDLL>gcc -c -o add.o add.c -D ADD_EXPORTS

    z:\Users\mpayne\Documents\MinGWDLL>gcc -o add.dll add.o -s -shared -Wl,--subsystem,windows,--out-implib,libadd.a
    Creating library file: libadd.a
    Тут видно, что кроме библиотеки нужен объектный файл, но если есть исходники - то собрать его не проблема
    Мне для сторонней библиотеки. Конкретно надо из glut32.dll glut32.a сделать.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •