Страница 1 из 1

from i386 to amd64 или Makefile for gcc

Добавлено: 2009-10-17 15:44:17
shlash
Имеется интересный мне прожект. Автор его забросил, поддержку и сопровождение не осуществляет. Продолжателей дела обнаружить пока не удалось.
Поставляется в виде трёх архивов: собранный бинарник для Линукса, бинарник для ФриБСД и комплект исходников. Основной язык разработки Эрланг - кроссплатформенно и переносимо, но используются три нативных динамических библиотеки. При внимательном рассмотрении, сборки оказались под i386. Целевая система - amd64.
Переходим к исходникам и видим, собственно, только исходники, без Makefile. Собственный опыт программирования на Си на уровне "Hello world", без подключения сторонних библиотек и написания собственных Makefile.

На основе инклюдов в исходниках:

Код: Выделить всё

drv_tls.c:#include <stdio.h>
drv_tls.c:#include <string.h>
drv_tls.c:#include <erl_driver.h>
drv_tls.c:#include <openssl/ssl.h>
drv_tls.c:#include <openssl/err.h>

drv_xml.c:#include <stdio.h>
drv_xml.c:#include <string.h>
drv_xml.c:#include <erl_driver.h>
drv_xml.c:#include <ei.h>
drv_xml.c:#include <expat.h>

drv_zlib.c:#include <stdio.h>
drv_zlib.c:#include <string.h>
drv_zlib.c:#include <erl_driver.h>
drv_zlib.c:#include <zlib.h>
написал свой Makefile:

Код: Выделить всё

CFLAGS = \
 -Wall -fpic \
 -I /usr/local/lib/erlang/erts-5.6.5/include/ \
 -I /usr/local/lib/erlang/lib/erl_interface-3.5.9/include/ \
 -I /usr/local/include/

LIBS =   \
 -shared \
 -L /usr/local/lib/erlang/lib/erl_interface-3.5.9/lib/ \
 -l erl_interface \
 -l ei \
 -L /usr/local/lib/

all:
        gcc ${CFLAGS} drv_tls.c ${LIBS} -l ssl -o drv_tls.so
        gcc ${CFLAGS} drv_xml.c ${LIBS} -l expat -o drv_xml.so
        gcc ${CFLAGS} drv_zlib.c ${LIBS} -l z -o drv_zlib.so
на выходе получаю:

Код: Выделить всё

-rwxr-xr-x  1 beard  beard  19192 17 окт 16:33 drv_tls.so
-rwxr-xr-x  1 beard  beard  28257 17 окт 16:33 drv_xml.so
-rwxr-xr-x  1 beard  beard  10433 17 окт 16:33 drv_zlib.so
по сравнению с оригинальными бинарниками для i386:

Код: Выделить всё

-rwxr-xr-x  1 beard  beard  37858 31 авг 01:44 drv_tls.so
-rwxr-xr-x  1 beard  beard  25590 31 авг 01:44 drv_xml.so
-rwxr-xr-x  1 beard  beard  11659 31 авг 01:44 drv_zlib.so
кажется, что drv_xml.so собрался успешно, а в остальных случаях что-то не подключилось.
Подскажите, что упускаю?

Re: from i386 to amd64 или Makefile for gcc

Добавлено: 2009-10-17 15:54:00
paradox
в tls что то наверное не подключилось
размером он каким то не очень

Re: from i386 to amd64 или Makefile for gcc

Добавлено: 2009-10-17 16:17:35
Alex Keda
а проверяли - работает?
может у вас компилятор новее и на выхлопе получается бинарник размером поменьше...

Re: from i386 to amd64 или Makefile for gcc

Добавлено: 2009-10-17 16:48:40
shlash
Упссс! Облажался. Ой, как стыдно.. :roll:
В этот раз заработало. В логах видно, включилась zlib компрессия. С шифрованием пока непонятно.
В прошлые разы, размеры получались сходные, но тогда не работало. Ругалась сразу на drv_xml, она была чуть меньше, чем сейчас.
В общем Makefile пока оставлю, как есть и попробую поковырять шифрование.