Skip to main content

[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}

Back to the top