]> granicus.if.org Git - postgresql/commitdiff
|> The Makefile.shlib changes will have to be discussed with other Linux
authorBruce Momjian <bruce@momjian.us>
Fri, 7 Jul 2000 01:23:44 +0000 (01:23 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 7 Jul 2000 01:23:44 +0000 (01:23 +0000)
|> developers so we are sure it will work on all platforms.

The problem with the current settings is that the linker is called
directly.  This is wrong, it should always be called through the
compiler
driver (the only exception is `ld -r').  This will make sure that the
necessary libraries like libgcc are linked in.

But there is still a different problem with the setting of LDFLAGS_ODBC.
The psqlodbc module defines the functions _init and _fini which are
reserved for the shared library initialisation.  These should be changed
to constructor functions.  Then LDFLAGS_ODBC can be changed to be just
`-lm'.  Btw, why does it use -Bsymbolic?

Andreas Schwab

src/Makefile.shlib
src/interfaces/odbc/psqlodbc.c

index 1f06d19388e70bebf032c2f4daa56bd0aae0c1de..467cfc18d77504fcf00e2cb0df9c59f7b5ceb03c 100644 (file)
@@ -6,7 +6,7 @@
 # Copyright (c) 1998, Regents of the University of California
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/Makefile.shlib,v 1.21 2000/06/28 18:29:13 petere Exp $
+#    $Header: /cvsroot/pgsql/src/Makefile.shlib,v 1.22 2000/07/07 01:23:43 momjian Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -143,9 +143,9 @@ endif
 
 ifeq ($(PORTNAME), linux)
   shlib                        := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
-  LDFLAGS_SL           := -Bdynamic -shared -soname $(shlib)
-  LDFLAGS_ODBC         := -Bsymbolic -lc -lm
-  SHLIB_LINK           += -lc
+  LD                   := $(CC)
+  LDFLAGS_SL           := -shared -Wl,-soname,$(shlib)
+  LDFLAGS_ODBC         := -lm
   CFLAGS               += $(CFLAGS_SL)
 endif
 
index 0df56ee1e7614cfab454ae9a304f80a98a02d26f..a4598383fcd6c0073807b65c002761b575b30c25 100644 (file)
@@ -33,8 +33,6 @@
 
 GLOBAL_VALUES globals;
 
-BOOL _init(void);
-BOOL _fini(void);
 RETCODE SQL_API SQLDummyOrdinal(void);
 
 #ifdef WIN32
@@ -97,6 +95,20 @@ WSADATA wsaData;
 #define FALSE  (BOOL)0
 #endif
 
+#ifdef __GNUC__
+
+/* This function is called at library initialization time.  */
+
+static BOOL
+__attribute__((constructor))
+init(void)
+{
+       getGlobalDefaults(DBMS_NAME, ODBCINST_INI, FALSE);
+       return TRUE;
+}
+
+#else
+
 /* These two functions do shared library initialziation on UNIX, well at least
  * on Linux. I don't know about other systems.
  */