Am Montag 08 Januar 2007 14:03 schrieb Hendrik Sattler:
> This kills DLL creation for windows, though, as not all symbols are
> exported. This means that another patch for this problem will follow, I
> first have to take a look at it.

As promised, I made a patch for API enforcement for windows (means, creating 
the lib more correctly). This makes it build again on win32.
While doing that, I found the GCC4 visibility feature and enabled that, too 
(practically the same thing).

With this patch, the lib/obex.sym with its usage in lib/Makefile.am can go 
away. Visibility does the same but you do not have to maintain two sets.
However, removing it makes it uncleaner when compiling with GCC < 4. Some 
embedded people are still using gcc-3.4, thus I left it in.

You need visibility.m4 from gettext (or ask me for it).

HS

PS: both patches should be included before next release!
Index: openobex-anoncvs/include/obex.h
===================================================================
--- openobex-anoncvs.orig/include/obex.h	2007-01-08 17:44:03.801182147 +0100
+++ openobex-anoncvs/include/obex.h	2007-01-08 17:44:31.162892147 +0100
@@ -35,8 +35,11 @@
 
 #ifdef _WIN32
 #include <winsock2.h>
+#define LIB_SYMBOL __declspec(dllimport)
+
 #else
 #include <sys/socket.h>
+#define LIB_SYMBOL
 #endif
 
 /* Hum... This would need to be autogenerated from configure,
@@ -61,51 +64,52 @@
 /*
  *  OBEX API
  */
-obex_t *OBEX_Init(int transport, obex_event_t eventcb, unsigned int flags);
-void    OBEX_Cleanup(obex_t *self);
-void OBEX_SetUserData(obex_t *self, void * data);
-void * OBEX_GetUserData(obex_t *self);
-void OBEX_SetUserCallBack(obex_t *self, obex_event_t eventcb, void * data);
-int OBEX_SetTransportMTU(obex_t *self, uint16_t mtu_rx, uint16_t mtu_tx_max);
-int OBEX_GetFD(obex_t *self);
-
-int OBEX_RegisterCTransport(obex_t *self, obex_ctrans_t *ctrans);
-void OBEX_SetCustomData(obex_t *self, void * data);
-void * OBEX_GetCustomData(obex_t *self);
-
-int    OBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addlen);
-int    OBEX_TransportDisconnect(obex_t *self);
-int    OBEX_CustomDataFeed(obex_t *self, uint8_t *inputbuf, int actual);
-int    OBEX_HandleInput(obex_t *self, int timeout);
-
-int    OBEX_ServerRegister(obex_t *self, struct sockaddr *saddr, int addrlen);
-obex_t *OBEX_ServerAccept(obex_t *server, obex_event_t eventcb, void * data);
-int    OBEX_Request(obex_t *self, obex_object_t *object);
-int    OBEX_CancelRequest(obex_t *self, int nice);
-int    OBEX_SuspendRequest(obex_t *self, obex_object_t *object);
-int    OBEX_ResumeRequest(obex_t *self);
-
-obex_object_t	*OBEX_ObjectNew(obex_t *self, uint8_t cmd);
-int		OBEX_ObjectDelete(obex_t *self, obex_object_t *object);
-
-int		OBEX_ObjectAddHeader(obex_t *self, obex_object_t *object, uint8_t hi, 
-			obex_headerdata_t hv, uint32_t hv_size, unsigned int flags);
-int OBEX_ObjectGetNextHeader(obex_t *self, obex_object_t *object, uint8_t *hi,
-					obex_headerdata_t *hv,
-					uint32_t *hv_size);
-int OBEX_ObjectReParseHeaders(obex_t *self, obex_object_t *object);
-int OBEX_ObjectSetRsp(obex_object_t *object, uint8_t rsp, uint8_t lastrsp);
-
-int OBEX_ObjectGetNonHdrData(obex_object_t *object, uint8_t **buffer);
-int OBEX_ObjectSetNonHdrData(obex_object_t *object, const uint8_t *buffer, unsigned int len);
-int OBEX_ObjectSetHdrOffset(obex_object_t *object, unsigned int offset);
-int OBEX_ObjectReadStream(obex_t *self, obex_object_t *object, const uint8_t **buf);
-int OBEX_ObjectGetCommand(obex_t *self, obex_object_t *object);
+LIB_SYMBOL obex_t * OBEX_Init(int transport, obex_event_t eventcb, unsigned int flags);
+LIB_SYMBOL void     OBEX_Cleanup(obex_t *self);
+LIB_SYMBOL void     OBEX_SetUserData(obex_t *self, void * data);
+LIB_SYMBOL void *   OBEX_GetUserData(obex_t *self);
+LIB_SYMBOL void     OBEX_SetUserCallBack(obex_t *self, obex_event_t eventcb, void * data);
+LIB_SYMBOL int      OBEX_SetTransportMTU(obex_t *self, uint16_t mtu_rx, uint16_t mtu_tx_max);
+LIB_SYMBOL int      OBEX_GetFD(obex_t *self);
+
+LIB_SYMBOL int    OBEX_RegisterCTransport(obex_t *self, obex_ctrans_t *ctrans);
+LIB_SYMBOL void   OBEX_SetCustomData(obex_t *self, void * data);
+LIB_SYMBOL void * OBEX_GetCustomData(obex_t *self);
+
+LIB_SYMBOL int OBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addlen);
+LIB_SYMBOL int OBEX_TransportDisconnect(obex_t *self);
+LIB_SYMBOL int OBEX_CustomDataFeed(obex_t *self, uint8_t *inputbuf, int actual);
+LIB_SYMBOL int OBEX_HandleInput(obex_t *self, int timeout);
+
+LIB_SYMBOL int      OBEX_ServerRegister(obex_t *self, struct sockaddr *saddr, int addrlen);
+LIB_SYMBOL obex_t * OBEX_ServerAccept(obex_t *server, obex_event_t eventcb, void * data);
+
+LIB_SYMBOL int OBEX_Request(obex_t *self, obex_object_t *object);
+LIB_SYMBOL int OBEX_CancelRequest(obex_t *self, int nice);
+LIB_SYMBOL int OBEX_SuspendRequest(obex_t *self, obex_object_t *object);
+LIB_SYMBOL int OBEX_ResumeRequest(obex_t *self);
+
+LIB_SYMBOL obex_object_t * OBEX_ObjectNew(obex_t *self, uint8_t cmd);
+LIB_SYMBOL int             OBEX_ObjectDelete(obex_t *self, obex_object_t *object);
+
+LIB_SYMBOL int OBEX_ObjectAddHeader(obex_t *self, obex_object_t *object,
+				    uint8_t hi, obex_headerdata_t hv, uint32_t hv_size,
+				    unsigned int flags);
+LIB_SYMBOL int OBEX_ObjectGetNextHeader(obex_t *self, obex_object_t *object,
+					uint8_t *hi, obex_headerdata_t *hv, uint32_t *hv_size);
+LIB_SYMBOL int OBEX_ObjectReParseHeaders(obex_t *self, obex_object_t *object);
+LIB_SYMBOL int OBEX_ObjectSetRsp(obex_object_t *object, uint8_t rsp, uint8_t lastrsp);
+
+LIB_SYMBOL int OBEX_ObjectGetNonHdrData(obex_object_t *object, uint8_t **buffer);
+LIB_SYMBOL int OBEX_ObjectSetNonHdrData(obex_object_t *object, const uint8_t *buffer, unsigned int len);
+LIB_SYMBOL int OBEX_ObjectSetHdrOffset(obex_object_t *object, unsigned int offset);
+LIB_SYMBOL int OBEX_ObjectReadStream(obex_t *self, obex_object_t *object, const uint8_t **buf);
+LIB_SYMBOL int OBEX_ObjectGetCommand(obex_t *self, obex_object_t *object);
 
-int OBEX_UnicodeToChar(uint8_t *c, const uint8_t *uc, int size);
-int OBEX_CharToUnicode(uint8_t *uc, const uint8_t *c, int size);
+LIB_SYMBOL int OBEX_UnicodeToChar(uint8_t *c, const uint8_t *uc, int size);
+LIB_SYMBOL int OBEX_CharToUnicode(uint8_t *uc, const uint8_t *c, int size);
 
-char *OBEX_ResponseToString(int rsp);
+LIB_SYMBOL char *OBEX_ResponseToString(int rsp);
 
 /*
  * This function is deprecated and will be removed in OpenOBEX 1.1.0
@@ -113,43 +117,43 @@
  * Please use the OBEX_ResponseToString instead.
  *
  */
-char* OBEX_GetResponseMessage(obex_t *self, int rsp);
+LIB_SYMBOL char* OBEX_GetResponseMessage(obex_t *self, int rsp);
 
 /*
  * TcpOBEX API (IPv4/IPv6)
  */
- int TcpOBEX_ServerRegister(obex_t* self, struct sockaddr *addr, int addrlen);
- int TcpOBEX_TransportConnect(obex_t *self, struct sockaddr *addr, int addrlen);
+LIB_SYMBOL int TcpOBEX_ServerRegister(obex_t* self, struct sockaddr *addr, int addrlen);
+LIB_SYMBOL int TcpOBEX_TransportConnect(obex_t *self, struct sockaddr *addr, int addrlen);
 
 /*
  * InOBEX API (deprecated)
  */
- int InOBEX_ServerRegister(obex_t *self);
- int InOBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addrlen);
+LIB_SYMBOL int InOBEX_ServerRegister(obex_t *self);
+LIB_SYMBOL int InOBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addrlen);
 
 /*
  * IrOBEX API 
  */
- int IrOBEX_ServerRegister(obex_t *self, const char *service);
- int IrOBEX_TransportConnect(obex_t *self, const char *service);
+LIB_SYMBOL int IrOBEX_ServerRegister(obex_t *self, const char *service);
+LIB_SYMBOL int IrOBEX_TransportConnect(obex_t *self, const char *service);
 
 /*
  * Bluetooth OBEX API
  */
- int BtOBEX_ServerRegister(obex_t *self, bdaddr_t *src, uint8_t channel);
- int BtOBEX_TransportConnect(obex_t *self, bdaddr_t *src, bdaddr_t *dst, uint8_t channel);
+LIB_SYMBOL int BtOBEX_ServerRegister(obex_t *self, bdaddr_t *src, uint8_t channel);
+LIB_SYMBOL int BtOBEX_TransportConnect(obex_t *self, bdaddr_t *src, bdaddr_t *dst, uint8_t channel);
 
 /*
  * OBEX File API
  */
-int FdOBEX_TransportSetup(obex_t *self, int rfd, int wfd, int mtu);
+LIB_SYMBOL int FdOBEX_TransportSetup(obex_t *self, int rfd, int wfd, int mtu);
 
 /*  
  * OBEX interface discovery API 
  */
- int OBEX_FindInterfaces(obex_t *self, obex_interface_t **intf);
- int OBEX_InterfaceConnect(obex_t *self, obex_interface_t *intf);
- void OBEX_FreeInterfaces(obex_t *self);
+LIB_SYMBOL int  OBEX_FindInterfaces(obex_t *self, obex_interface_t **intf);
+LIB_SYMBOL int  OBEX_InterfaceConnect(obex_t *self, obex_interface_t *intf);
+LIB_SYMBOL void OBEX_FreeInterfaces(obex_t *self);
 
 #ifdef __cplusplus
 }
Index: openobex-anoncvs/lib/obex.c
===================================================================
--- openobex-anoncvs.orig/lib/obex.c	2007-01-08 17:44:03.657173147 +0100
+++ openobex-anoncvs/lib/obex.c	2007-01-08 17:44:31.190893897 +0100
@@ -40,11 +40,21 @@
 #ifdef _WIN32
 #include <winsock2.h>
 #define ESOCKTNOSUPPORT 1
-#else /* _WIN32 */
+#ifdef DLL_EXPORT
+#define LIB_SYMBOL __declspec(dllexport)
+#endif
 
+#else /* _WIN32 */
 #include <fcntl.h>
 #include <signal.h>
 #include <unistd.h>
+#ifdef HAVE_VISIBILITY
+#define LIB_SYMBOL __attribute__ ((visibility("default")))
+#endif
+#endif
+
+#ifndef LIB_SYMBOL
+#define LIB_SYMBOL
 #endif
 
 #include "obex_main.h"
@@ -90,6 +100,7 @@
  *
  * Returns an OBEX handle or %NULL on error.
  */
+LIB_SYMBOL
 obex_t *OBEX_Init(int transport, obex_event_t eventcb, unsigned int flags)
 {
 	obex_t *self;
@@ -182,6 +193,7 @@
  * Call this function directly after OBEX_Init if you are using
  * a custom transport.
  */
+LIB_SYMBOL
 int OBEX_RegisterCTransport(obex_t *self, obex_ctrans_t *ctrans)
 {
 	obex_return_val_if_fail(self != NULL, -1);
@@ -197,6 +209,7 @@
  *
  * Close down an OBEX instance.
  */
+LIB_SYMBOL
 void OBEX_Cleanup(obex_t *self)
 {
 	obex_return_if_fail(self != NULL);
@@ -220,6 +233,7 @@
  * @self: OBEX handle
  * @data: It's all up to you!
  */
+LIB_SYMBOL
 void OBEX_SetUserData(obex_t *self, void * data)
 {
 	obex_return_if_fail(self != NULL);
@@ -232,6 +246,7 @@
  *
  * Returns userdata
  */
+LIB_SYMBOL
 void * OBEX_GetUserData(obex_t *self)
 {
 	obex_return_val_if_fail(self != NULL, 0);
@@ -244,6 +259,7 @@
  * @eventcb: Function pointer to your new event callback.
  * @data: Pointer to the new user data to pass to the new callback (optional)
  */
+LIB_SYMBOL
 void OBEX_SetUserCallBack(obex_t *self, obex_event_t eventcb, void * data)
 {
 	obex_return_if_fail(self != NULL);
@@ -269,6 +285,7 @@
  *
  * Returns -1 on error.
  */
+LIB_SYMBOL
 int OBEX_SetTransportMTU(obex_t *self, uint16_t mtu_rx, uint16_t mtu_tx_max)
 {
 	obex_return_val_if_fail(self != NULL, -EFAULT);
@@ -311,6 +328,7 @@
  *
  * Returns -1 on error.
  */
+LIB_SYMBOL
 int OBEX_ServerRegister(obex_t *self, struct sockaddr *saddr, int addrlen)
 {
 	DEBUG(3, "\n");
@@ -343,6 +361,7 @@
  *
  * Returns the client instance or %NULL for error.
  */
+LIB_SYMBOL
 obex_t *OBEX_ServerAccept(obex_t *server, obex_event_t eventcb, void * data)
 {
 	obex_t *self;
@@ -431,6 +450,7 @@
  * Like select() this function returns -1 on error, 0 on timeout or
  * positive on success.
  */
+LIB_SYMBOL
 int OBEX_HandleInput(obex_t *self, int timeout)
 {
 	DEBUG(4, "\n");
@@ -445,6 +465,7 @@
  * @inputbuf: Pointer to custom data
  * @actual: Length of buffer
  */
+LIB_SYMBOL
 int OBEX_CustomDataFeed(obex_t *self, uint8_t *inputbuf, int actual)
 {
 	DEBUG(3, "\n");
@@ -464,6 +485,7 @@
  *
  * Returns -1 on error.
  */
+LIB_SYMBOL
 int OBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addrlen)
 {
 	DEBUG(4, "\n");
@@ -481,6 +503,7 @@
  * OBEX_TransportDisconnect - Disconnect transport
  * @self: OBEX handle
  */
+LIB_SYMBOL
 int OBEX_TransportDisconnect(obex_t *self)
 {
 	DEBUG(4, "\n");
@@ -508,6 +531,7 @@
  * This mean that after receiving an incomming connection, you need to
  * call this function again.
  */
+LIB_SYMBOL
 int OBEX_GetFD(obex_t *self)
 {
 	obex_return_val_if_fail(self != NULL, -1);
@@ -523,6 +547,7 @@
  *
  * Returns negative on error.
  */
+LIB_SYMBOL
 int OBEX_Request(obex_t *self, obex_object_t *object)
 {
 	DEBUG(4, "\n");
@@ -551,6 +576,7 @@
  *
  *
  */
+LIB_SYMBOL
 int OBEX_CancelRequest(obex_t *self, int nice)
 {
 	obex_return_val_if_fail(self != NULL, -1);
@@ -562,6 +588,7 @@
  * @self: OBEX handle
  * @object: object to suspend (NULL to suspend currently transfered object)
  */
+LIB_SYMBOL
 int OBEX_SuspendRequest(obex_t *self, obex_object_t *object)
 {
 	obex_return_val_if_fail(object != NULL || self->object != NULL, -1);
@@ -572,6 +599,7 @@
  * OBEX_ResumeRequest - Resume transfer of an object
  * @self: OBEX handle
  */
+LIB_SYMBOL
 int OBEX_ResumeRequest(obex_t *self)
 {
 	obex_return_val_if_fail(self->object != NULL, -1);
@@ -585,6 +613,7 @@
  *
  * Returns a pointer to a new OBEX Object or %NULL on error.
  */
+LIB_SYMBOL
 obex_object_t *OBEX_ObjectNew(obex_t *self, uint8_t cmd)
 {
 	obex_object_t *object;
@@ -615,6 +644,7 @@
  * Note that as soon as you have passed an object to the lib using
  * OBEX_Request(), you shall not delete it yourself.
  */
+LIB_SYMBOL
 int OBEX_ObjectDelete(obex_t *self, obex_object_t *object)
 {
 	obex_return_val_if_fail(object != NULL, -1);
@@ -651,6 +681,7 @@
  *
  * The headers will be sent in the order you add them.
  */
+LIB_SYMBOL
 int OBEX_ObjectAddHeader(obex_t *self, obex_object_t *object, uint8_t hi,
 				obex_headerdata_t hv, uint32_t hv_size,
 				unsigned int flags)
@@ -675,6 +706,7 @@
  *
  * You will get the headers in the received order.
  */
+LIB_SYMBOL
 int OBEX_ObjectGetNextHeader(obex_t *self, obex_object_t *object, uint8_t *hi,
 					obex_headerdata_t *hv,
 					uint32_t *hv_size)
@@ -697,6 +729,7 @@
  * Returns 1 on success
  * Returns 0 if failed due previous parsing not completed.
  */
+LIB_SYMBOL
 int OBEX_ObjectReParseHeaders(obex_t *self, obex_object_t *object)
 {
 	obex_return_val_if_fail(self != NULL, -1);
@@ -722,6 +755,7 @@
  *
  * Returns the number of bytes in buffer, or 0 for end-of-stream.
  */
+LIB_SYMBOL
 int OBEX_ObjectReadStream(obex_t *self, obex_object_t *object, const uint8_t **buf)
 {
 	obex_return_val_if_fail(self != NULL, -1);
@@ -739,6 +773,7 @@
  *
  * Returns -1 on error.
  */
+LIB_SYMBOL
 int OBEX_ObjectSetRsp(obex_object_t *object, uint8_t rsp, uint8_t lastrsp)
 {
 	obex_return_val_if_fail(object != NULL, -1);
@@ -752,6 +787,7 @@
  *
  * Returns the size of the buffer or -1 for error.
  */
+LIB_SYMBOL
 int OBEX_ObjectGetNonHdrData(obex_object_t *object, uint8_t **buffer)
 {
 	obex_return_val_if_fail(object != NULL, -1);
@@ -771,6 +807,7 @@
  * Some commands (notably SetPath) send data before headers. Use this
  * function to set this data.
  */
+LIB_SYMBOL
 int OBEX_ObjectSetNonHdrData(obex_object_t *object, const uint8_t *buffer, unsigned int len)
 {
 	//TODO: Check that we actually can send len bytes without violating MTU
@@ -798,6 +835,7 @@
  * command has data before the headers comes. You do NOT need to use this
  * function on Connect and SetPath, they are handled automatically.
  */
+LIB_SYMBOL
 int OBEX_ObjectSetHdrOffset(obex_object_t *object, unsigned int offset)
 {
 	obex_return_val_if_fail(object != NULL, -1);
@@ -812,6 +850,7 @@
  *
  * Call this function to get the OBEX command of an object.
  */
+LIB_SYMBOL
 int OBEX_ObjectGetCommand(obex_t *self, obex_object_t *object)
 {
 	obex_return_val_if_fail(object != NULL || self->object != NULL, -1);
@@ -830,6 +869,7 @@
  *
  * Buffers may not overlap. Returns -1 on error.
  */
+LIB_SYMBOL
 int OBEX_UnicodeToChar(uint8_t *c, const uint8_t *uc, int size)
 {
 	int n;
@@ -857,6 +897,7 @@
  *
  * Buffers may not overlap. Returns -1 on error.
  */
+LIB_SYMBOL
 int OBEX_CharToUnicode(uint8_t *uc, const uint8_t *c, int size)
 {
 	int len, n;
@@ -885,6 +926,7 @@
  *
  * The returned char must not be freed. Returns %NULL on error.
  */
+LIB_SYMBOL
 char *OBEX_ResponseToString(int rsp)
 {
 	DEBUG(4, "\n");
@@ -899,6 +941,7 @@
  *
  * The returned char must not be freed. Returns %NULL on error.
  */
+LIB_SYMBOL
 char* OBEX_GetResponseMessage(obex_t *self, int rsp)
 {
 	DEBUG(4, "\n");
@@ -922,6 +965,7 @@
  * multiple connections transparently (i.e. without a lookup table).
  * - Jean II
  */
+LIB_SYMBOL
 void OBEX_SetCustomData(obex_t *self, void * data)
 {
 	obex_return_if_fail(self != NULL);
@@ -934,6 +978,7 @@
  *
  * Returns Custom Transport data
  */
+LIB_SYMBOL
 void * OBEX_GetCustomData(obex_t *self)
 {
 	obex_return_val_if_fail(self != NULL, 0);
@@ -951,6 +996,7 @@
  *
  * Returns -1 on error.
  */
+LIB_SYMBOL
 int TcpOBEX_ServerRegister(obex_t* self, struct sockaddr *addr, int addrlen)
 {
 	DEBUG(3, "\n");
@@ -973,6 +1019,7 @@
  *
  * Returns -1 on error.
  */
+LIB_SYMBOL
 int TcpOBEX_TransportConnect(obex_t *self, struct sockaddr *addr, int addrlen)
 {
      	DEBUG(4, "\n");
@@ -999,6 +1046,7 @@
  *
  * Returns -1 on error.
  */
+LIB_SYMBOL
 int InOBEX_ServerRegister(obex_t *self)
 {
 	DEBUG(3, "\n");
@@ -1017,6 +1065,7 @@
  *
  * Returns -1 on error.
  */
+LIB_SYMBOL
 int InOBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addrlen)
 {
      	DEBUG(4, "\n");
@@ -1045,6 +1094,7 @@
  *
  * Returns -1 on error.
  */
+LIB_SYMBOL
 int IrOBEX_ServerRegister(obex_t *self, const char *service)
 {
 	DEBUG(3, "\n");
@@ -1067,6 +1117,7 @@
  *
  * An easier connect function to use for IrDA (IrOBEX) only.
  */
+LIB_SYMBOL
 int IrOBEX_TransportConnect(obex_t *self, const char *service)
 {
      	DEBUG(4, "\n");
@@ -1096,6 +1147,7 @@
  *
  * Returns -1 on error.
  */
+LIB_SYMBOL
 int BtOBEX_ServerRegister(obex_t *self, bdaddr_t *src, uint8_t channel)
 {
 	DEBUG(3, "\n");
@@ -1119,6 +1171,7 @@
  *
  *  An easier connect function to use for Bluetooth (Bluetooth OBEX) only. 
  */
+LIB_SYMBOL
 int BtOBEX_TransportConnect(obex_t *self, bdaddr_t *src, bdaddr_t *dst, uint8_t channel)
 {
 	DEBUG(4, "\n");
@@ -1150,6 +1203,7 @@
  *  @wfd: descriptor to write
  *  @mtu: transport mtu: 0 - default
  */
+LIB_SYMBOL
 int FdOBEX_TransportSetup(obex_t *self, int rfd, int wfd, int mtu)
 {
 	DEBUG(4, "\n");
@@ -1174,6 +1228,7 @@
  *  An easier connect function to connect to a discovered interface (currently
  *  USB OBEX only). 
  */
+LIB_SYMBOL
 int OBEX_InterfaceConnect(obex_t *self, obex_interface_t *intf)
 {
 	DEBUG(4, "\n");
@@ -1207,6 +1262,7 @@
  *
  *  Gets a list of OBEX interfaces, or NULL if there are none.
  */
+LIB_SYMBOL
 int OBEX_FindInterfaces(obex_t *self, obex_interface_t **interfaces)
 {
 	DEBUG(4, "\n");
@@ -1235,6 +1291,7 @@
  *  Frees memory allocated to OBEX interface structures after it has been 
  *  allocated by OBEX_FindInterfaces.
  */
+LIB_SYMBOL
 void OBEX_FreeInterfaces(obex_t *self)
 {
 	DEBUG(4, "\n");
Index: openobex-anoncvs/configure.in
===================================================================
--- openobex-anoncvs.orig/configure.in	2007-01-08 17:44:03.873186647 +0100
+++ openobex-anoncvs/configure.in	2007-01-08 17:44:31.214895397 +0100
@@ -21,6 +21,7 @@
 
 AC_PROG_LIBTOOL
 
+gl_VISIBILITY
 AC_CANONICAL_HOST
 
 AC_PATH_WIN32
Index: openobex-anoncvs/lib/Makefile.am
===================================================================
--- openobex-anoncvs.orig/lib/Makefile.am	2007-01-08 17:44:23.754429147 +0100
+++ openobex-anoncvs/lib/Makefile.am	2007-01-08 17:44:31.242897147 +0100
@@ -17,6 +17,8 @@
 	irda.h irda_wrap.h \
 	usbobex.c usbobex.h
 
+libopenobex_la_CFLAGS = @CFLAG_VISIBILITY@
+
 libopenobex_la_LDFLAGS = \
 	-no-undefined \
 	-version-info 4:0:3 \
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Openobex-users mailing list
[email protected]
http://lists.sourceforge.net/lists/listinfo/openobex-users

Reply via email to