Обсуждение: BUG #4731: compile with -fast fails on ld: duplicate symbol _PGP_S2K_TYPE in pgp.o and pgp-mpi-openssl.o
The following bug has been logged online: Bug reference: 4731 Logged by: Ceriel Jacobs Email address: cerieljacobs@gmail.com PostgreSQL version: 8.3.7 Operating system: OS X 10.5.6 Description: compile with -fast fails on ld: duplicate symbol _PGP_S2K_TYPE in pgp.o and pgp-mpi-openssl.o Details: Compilation fails on: /usr/bin/gcc-4.2 -no-cpp-precomp -fast -march=nocona -isysroot /Developer/SDKs/MacOSX10.5.sdk -arch x86_64 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -bundle -multiply_defined suppress pgcrypto.o px.o px-hmac.o px-crypt.o crypt-gensalt.o crypt-blowfish.o crypt-des.o crypt-md5.o openssl.o pgp-mpi-openssl.o mbuf.o pgp.o pgp-armor.o pgp-cfb.o pgp-compress.o pgp-decrypt.o pgp-encrypt.o pgp-info.o pgp-mpi.o pgp-pubdec.o pgp-pubenc.o pgp-pubkey.o pgp-s2k.o pgp-pgsql.o -L../../src/port -L/opt/local/lib -L/opt/local/lib -L/opt/local/lib -bundle_loader ../../src/backend/postgres -lcrypto -lz -o libpgcrypto.0.0.so ld: duplicate symbol _PGP_S2K_TYPE in pgp.o and pgp-mpi-openssl.o collect2: ld returned 1 exit status gnumake: *** [libpgcrypto.0.0.so] Error 1 Environment: Processor: core2duo (64-bit) GCC: i686-apple-darwin9-gcc-4.2.1 -fast = -O3 -fomit-frame-pointer -fstrict-aliasing -momit-leaf-frame-pointer -fno-tree-pre -falign-loops When only specifying -O3, compilation succeeds.
"Ceriel Jacobs" <cerieljacobs@gmail.com> writes: > ld: duplicate symbol _PGP_S2K_TYPE in pgp.o and pgp-mpi-openssl.o I think at bottom that's a compiler/linker bug which you should mention to Apple. However, I see what is causing it: pgp.h contains enum { PGP_S2K_SIMPLE = 0, PGP_S2K_SALTED = 1, PGP_S2K_ISALTED = 3 } PGP_S2K_TYPE; I think what was meant was enum PGP_S2K_TYPE { PGP_S2K_SIMPLE = 0, PGP_S2K_SALTED = 1, PGP_S2K_ISALTED = 3 }; because what the first one is doing is defining a global variable that is of an anonymous enum type. Marko, am I right that this is just a syntax mistake, and not intentional creation of a variable? There are several occurrences of the pattern in pgp.h. regards, tom lane
Marko Kreen <markokr@gmail.com> writes: > On 3/25/09, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> Marko, am I right that this is just a syntax mistake, and not >> intentional creation of a variable? There are several occurrences >> of the pattern in pgp.h. > Yes, it's syntax bug. Should I send patch? No need, I think I can figure it out ;-) regards, tom lane
On 3/25/09, Tom Lane <tgl@sss.pgh.pa.us> wrote: > "Ceriel Jacobs" <cerieljacobs@gmail.com> writes: > > ld: duplicate symbol _PGP_S2K_TYPE in pgp.o and pgp-mpi-openssl.o > > I think at bottom that's a compiler/linker bug which you should mention > to Apple. However, I see what is causing it: pgp.h contains > > enum > { > PGP_S2K_SIMPLE = 0, > PGP_S2K_SALTED = 1, > PGP_S2K_ISALTED = 3 > } PGP_S2K_TYPE; > > I think what was meant was > > enum PGP_S2K_TYPE > { > PGP_S2K_SIMPLE = 0, > PGP_S2K_SALTED = 1, > PGP_S2K_ISALTED = 3 > }; > > because what the first one is doing is defining a global variable > that is of an anonymous enum type. Eh, it's silly mistake indeed. > Marko, am I right that this is just a syntax mistake, and not > intentional creation of a variable? There are several occurrences > of the pattern in pgp.h. Yes, it's syntax bug. Should I send patch? -- marko