gcc, mingw, binutils - вопрос к народу имеющему дело с windows и linux, с опытом по портированию программ
gcc, mingw, binutils - вопрос к народу имеющему дело с windows и linux, с опытом по портированию программ
привет всем. хочу портировать статическую библиотеку из linux в windows.
есть статическая библиотека скомпилированная под linux.
оговорюсь сразу, исходников нет.
для понимания, что я хочу, качаем библу:
http://poretsky.homelinux.net/packages/ubuntu/pool/hardy/non-free/librutts-dev_3.0_i386.deb
есть mingw под windows.
есть utilita objcopy, которая конвертит объектники, или архивы *.a.
при запросе хелпа, в конце выдается следующее:
objcopy: supported targets: pe-i386 pei-i386 elf32-i386 elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex
мы понимаем, что утилита поддерживает то, что нам надо - pe-i386 - виндовый portable executable, elf32-i386 - линуксовый исполняемый.
делаю следующее:
objcopy -O pe-i386 librutts.a
все ок, из elf формата, она сконвертилась в pe.
для проверки пишу следующий код на c:
gcc ru_tts.c librutts.a
пробовал и на FreeBasic- линкер ненаходит функции.
gcc выдает следующее:
c:\temp\ccoJ63s7.o:ru_tts.c:(.text+0x26): undefined reference to `ru_tts_setup'
в чем трабла, или моя затея нереализуема.
я понимаю, что даже если функции линкер найдет, могут возникнуть другие проблемы, например, библиотечные функции, которых в винде вообще может не быть, но поковырявшись во внутренностях, я , вродь, вызовов из других библиотек не обнаружил. на 100 процент не утверждаю, так как не очень уж сильно ковырялся.
так же я понимаю, что это разные форматы, в которых поразному реализовано распределение памяти и т.д.
но тогда для чего сделана такая функция по конвертации библиотек и объектников?
короче, может какие-то ключики задать надо, буду очень признателен за помощь.
я пробовал дизассемблировать, там даже переменные почти все нормально именованы, и вроде, получилось собрать под windows, но там другие траблы пошли из-за masm, а может, подводные камни, которые дизассемблер не нашол.
да, еще рядышком с librutts.a есть файлик librutts.la- я в gcc тонкостях не силён.
что за прога такая? русский синтезатор речи, еще с dos времен, потом портированный под linux, под dos он весил 50 кб.
вот потому возможно и нет вызовов сторонних библиотек, на асме тогда писался, да и под linux, врятли что то круто изменилось, только на 32 бит переделали да написали обертки.
есть статическая библиотека скомпилированная под linux.
оговорюсь сразу, исходников нет.
для понимания, что я хочу, качаем библу:
http://poretsky.homelinux.net/packages/ubuntu/pool/hardy/non-free/librutts-dev_3.0_i386.deb
есть mingw под windows.
есть utilita objcopy, которая конвертит объектники, или архивы *.a.
при запросе хелпа, в конце выдается следующее:
objcopy: supported targets: pe-i386 pei-i386 elf32-i386 elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex
мы понимаем, что утилита поддерживает то, что нам надо - pe-i386 - виндовый portable executable, elf32-i386 - линуксовый исполняемый.
делаю следующее:
objcopy -O pe-i386 librutts.a
все ок, из elf формата, она сконвертилась в pe.
для проверки пишу следующий код на c:
- Код:
#include "ru_tts.h"
int main(int argc, char *argv)
{
ru_tts_setup(50,50,00);
return 0;
};
gcc ru_tts.c librutts.a
пробовал и на FreeBasic- линкер ненаходит функции.
gcc выдает следующее:
c:\temp\ccoJ63s7.o:ru_tts.c:(.text+0x26): undefined reference to `ru_tts_setup'
в чем трабла, или моя затея нереализуема.
я понимаю, что даже если функции линкер найдет, могут возникнуть другие проблемы, например, библиотечные функции, которых в винде вообще может не быть, но поковырявшись во внутренностях, я , вродь, вызовов из других библиотек не обнаружил. на 100 процент не утверждаю, так как не очень уж сильно ковырялся.
так же я понимаю, что это разные форматы, в которых поразному реализовано распределение памяти и т.д.
но тогда для чего сделана такая функция по конвертации библиотек и объектников?
короче, может какие-то ключики задать надо, буду очень признателен за помощь.
я пробовал дизассемблировать, там даже переменные почти все нормально именованы, и вроде, получилось собрать под windows, но там другие траблы пошли из-за masm, а может, подводные камни, которые дизассемблер не нашол.
да, еще рядышком с librutts.a есть файлик librutts.la- я в gcc тонкостях не силён.
что за прога такая? русский синтезатор речи, еще с dos времен, потом портированный под linux, под dos он весил 50 кб.
вот потому возможно и нет вызовов сторонних библиотек, на асме тогда писался, да и под linux, врятли что то круто изменилось, только на 32 бит переделали да написали обертки.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Права доступа к этому форуму:
Вы не можете отвечать на сообщения