[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [paho-dev] Building paho.mqtt.c Client as a static library
|
Bonjour François.
I've attached a patch. You can take it as a start point to build Paho
C as a static library.
Or you might compile and group the object modules into an archive
using the commands:
$ cc -c -g -fPIC -Os -Wall -Ibuild src/Clients.c src/Heap.c
src/LinkedList.c src/Log.c src/Messages.c src/MQTTClient.c
src/MQTTPacket.c src/MQTTPacketOut.c src/MQTTPersistence.c
src/MQTTPersistenceDefault.c src/MQTTProtocolClient.c
src/MQTTProtocolOut.c src/SocketBuffer.c src/Socket.c src/StackTrace.c
src/Thread.c src/Tree.c src/utf-8.c
$ ar -cru build/output/libpaho-mqtt3c.a Clients.o Heap.o
LinkedList.o Log.o Messages.o MQTTClient.o MQTTPacket.o
MQTTPacketOut.o MQTTPersistence.o MQTTPersistenceDefault.o
MQTTProtocolClient.o MQTTProtocolOut.o SocketBuffer.o Socket.o
StackTrace.o Thread.o Tree.o utf-8.o
$ cc -static -o build/output/samples/paho_cs_sub
src/samples/paho_cs_sub.c build/output/libpaho-mqtt3c.a -I src
-lpthread -L build/output
Also, there is another option. You can use the Autotools branch
(https://github.com/eclipse/paho.mqtt.c/pull/148). It allows you to
build static versions of the library.
Best regards,
2016-06-30 11:18 GMT-05:00 Francois Mace <francois.mace@xxxxxxxxxxx>:
> Hello Everyone,
>
>
>
> I am currently looking at the possibility to build the paho.mqtt.c library
> as a static library.
>
> Indeed, I run a uclinux linux application using an ARM Cortex-M4 processor
> for which I have already managed to cross-compile the embedded client in
> revision 1.0.0.
>
> However, looking at upgrading the client, I am interested by features (such
> as async communications, …) which are not provided by the embedded client,
> but cannot use shared object on my platform.
>
>
>
> Any advice on how I shall be modifying the GNU makefile to target a static
> lib instead of shared objects?
>
>
>
> Thanks in advance.
>
>
>
>
>
> François Macé
>
> .
>
>
>
>
> _______________________________________________
> paho-dev mailing list
> paho-dev@xxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe from
> this list, visit
> https://dev.eclipse.org/mailman/listinfo/paho-dev
--
Guilherme Maciel Ferreira
Mobile Brazil: +55 48 9917 3969
Mobile México: +52 33 1968 6766
Site: http://guilhermemacielferreira.com/
Skype: guilherme.maciel.ferreira
diff --git a/Makefile b/Makefile
index e84bc31..366607c 100755
--- a/Makefile
+++ b/Makefile
@@ -80,6 +80,8 @@ SOURCE_FILES_CS = $(filter-out $(srcdir)/MQTTAsync.c $(srcdir)/MQTTVersion.c, $(
SOURCE_FILES_A = $(filter-out $(srcdir)/MQTTClient.c $(srcdir)/MQTTVersion.c $(srcdir)/SSLSocket.c, $(SOURCE_FILES))
SOURCE_FILES_AS = $(filter-out $(srcdir)/MQTTClient.c $(srcdir)/MQTTVersion.c, $(SOURCE_FILES))
+OBJECT_FILES_C = $(patsubst src/%.c, %.o, ${SOURCE_FILES_C})
+
HEADERS = $(srcdir)/*.h
HEADERS_C = $(filter-out $(srcdir)/MQTTAsync.h, $(HEADERS))
HEADERS_A = $(HEADERS)
@@ -121,12 +123,15 @@ MAJOR_VERSION = 1
MINOR_VERSION = 0
VERSION = ${MAJOR_VERSION}.${MINOR_VERSION}
+MQTTSTATICLIB_C_TARGET = ${blddir}/lib${MQTTLIB_C}.a
+
MQTTLIB_C_TARGET = ${blddir}/lib${MQTTLIB_C}.so.${VERSION}
MQTTLIB_CS_TARGET = ${blddir}/lib${MQTTLIB_CS}.so.${VERSION}
MQTTLIB_A_TARGET = ${blddir}/lib${MQTTLIB_A}.so.${VERSION}
MQTTLIB_AS_TARGET = ${blddir}/lib${MQTTLIB_AS}.so.${VERSION}
MQTTVERSION_TARGET = ${blddir}/MQTTVersion
+CCFLAGS_A = -c -g -fPIC $(CFLAGS) -Os -Wall -fvisibility=hidden -I$(blddir_work)
CCFLAGS_SO = -g -fPIC $(CFLAGS) -Os -Wall -fvisibility=hidden -I$(blddir_work)
FLAGS_EXE = $(LDFLAGS) -I ${srcdir} -lpthread -L ${blddir}
FLAGS_EXES = $(LDFLAGS) -I ${srcdir} ${START_GROUP} -lpthread -lssl -lcrypto ${END_GROUP} -L ${blddir}
@@ -173,7 +178,7 @@ endif
all: build
-build: | mkdir ${MQTTLIB_C_TARGET} ${MQTTLIB_CS_TARGET} ${MQTTLIB_A_TARGET} ${MQTTLIB_AS_TARGET} ${MQTTVERSION_TARGET} ${SYNC_SAMPLES} ${ASYNC_SAMPLES} ${SYNC_TESTS} ${SYNC_SSL_TESTS} ${ASYNC_TESTS} ${ASYNC_SSL_TESTS}
+build: | mkdir ${MQTTLIB_C_TARGET} ${MQTTLIB_CS_TARGET} ${MQTTLIB_A_TARGET} ${MQTTLIB_AS_TARGET} ${MQTTVERSION_TARGET} ${SYNC_SAMPLES} ${ASYNC_SAMPLES} ${SYNC_TESTS} ${SYNC_SSL_TESTS} ${ASYNC_TESTS} ${ASYNC_SSL_TESTS} ${MQTTSTATICLIB_C_TARGET}
clean:
rm -rf ${blddir}/*
@@ -204,6 +209,10 @@ ${ASYNC_SAMPLES}: ${blddir}/samples/%: ${srcdir}/samples/%.c $(MQTTLIB_A_TARGET)
$(blddir_work)/VersionInfo.h: $(srcdir)/VersionInfo.h.in
$(SED_COMMAND) $< > $@
+${MQTTSTATICLIB_C_TARGET}: ${SOURCE_FILES_C} ${HEADERS_C} $(blddir_work)/VersionInfo.h
+ ${CC} ${CCFLAGS_A} ${SOURCE_FILES_C}
+ ${AR} -cru $@ ${OBJECT_FILES_C}
+
${MQTTLIB_C_TARGET}: ${SOURCE_FILES_C} ${HEADERS_C} $(blddir_work)/VersionInfo.h
${CC} ${CCFLAGS_SO} -o $@ ${SOURCE_FILES_C} ${LDFLAGS_C}
-ln -s lib$(MQTTLIB_C).so.${VERSION} ${blddir}/lib$(MQTTLIB_C).so.${MAJOR_VERSION}