make install fails with multiple declaration errors when linking libprofile.so

RESOLVED DUPLICATE of bug 248451

Status

()

Firefox
Build Config
--
critical
RESOLVED DUPLICATE of bug 248451
14 years ago
14 years ago

People

(Reporter: Alex Merry, Assigned: Brian Ryner (not reading))

Tracking

Firefox Tracking Flags

(Not tracked)

Details

(Reporter)

Description

14 years ago
User-Agent:       Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040601 Firefox/0.8
Build Identifier: CVS (2004-06-26)

The make routine runs without any problems.

In the make install routine, all is good until it gets to profile/build. When
trying to link libprofile.so with

c++ -I/usr/X11R6/include -frtti -fno-exceptions -Wall -Wconversion
-Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy
-Wno-non-virtual-dtor -Wno-long-long -march=athlon-xp -mfpmath=sse -fshort-wchar
-pthread -pipe  -DNDEBUG -DTRIMMED -ffunction-sections -march=athlon-xp -O3
-fPIC -shared -Wl,-h -Wl,libprofile.so -o libprofile.so  nsProfileFactory.o    
  -Wl,--whole-archive ../../dist/lib/libprofile_s.a
../../dist/lib/libprofdirserviceprovider_s.a  -Wl,--no-whole-archive
-L../../dist/bin -L../../dist/lib -L../../dist/bin -lxpcom  -L../../dist/lib
-lxpcom_compat -L../../dist/bin -lmozjs -L/usr/src/mozilla/dist/lib -lplds4
-lplc4 -lnspr4 -lpthread -ldl   -Wl,--version-script
-Wl,../../build/unix/gnu-ld-scripts/components-version-script -Wl,-Bsymbolic
-ldl -lm

it produces a whole load of "multiple definition of `nsProfileLock::xxx` errors,
and fails.

A quick look through the related libraries shows that the problem is that
libprofile.so is made by linking together libprofile_s.a (symlink to
../../toolkit/profile/src/libprofile_s.a) and libprofdirserviceprovider_s.a
(symlink to ../../profile/dirserviceprovider/src/libprofdirserviceprovider_s.a)
from dist/lib. These both include nsProfileLock.o built from
profile/dirserviceprovider/src/nsProfileLock.cpp, and so both contain those
functions.

There is another libprofile_s.a in profile/src which doesn't link against
nsProfileLock.o. Should this be the one libprofile.so links against?

Reproducible: Always
Steps to Reproduce:
1. Get firefox 0.9 or CVS
2. configure
3. make
4. make install
Actual Results:  
../../dist/lib/libprofile_s.a(nsProfileLock.o)(.text._ZN13nsProfileLockD1Ev+0x0):
first defined here
../../dist/lib/libprofdirserviceprovider_s.a(nsProfileLock.o)(.text._ZN13nsProfileLock18RemovePidLockFilesEv+0x0):
In function `nsProfileLock::RemovePidLockFiles()':
: multiple definition of `nsProfileLock::RemovePidLockFiles()'
../../dist/lib/libprofile_s.a(nsProfileLock.o)(.text._ZN13nsProfileLock18RemovePidLockFilesEv+0x0):
first defined here
../../dist/lib/libprofdirserviceprovider_s.a(nsProfileLock.o)(.text._ZN13nsProfileLock18FatalSignalHandlerEi+0x0):
In function `nsProfileLock::FatalSignalHandler(int)':
: multiple definition of `nsProfileLock::FatalSignalHandler(int)'
../../dist/lib/libprofile_s.a(nsProfileLock.o)(.text._ZN13nsProfileLock18FatalSignalHandlerEi+0x0):
first defined here
../../dist/lib/libprofdirserviceprovider_s.a(nsProfileLock.o)(.text._ZN13nsProfileLock13LockWithFcntlERK10nsACString+0x0):
In function `nsProfileLock::LockWithFcntl(nsACString const&)':
: multiple definition of `nsProfileLock::LockWithFcntl(nsACString const&)'
../../dist/lib/libprofile_s.a(nsProfileLock.o)(.text._ZN13nsProfileLock13LockWithFcntlERK10nsACString+0x0):
first defined here
../../dist/lib/libprofdirserviceprovider_s.a(nsProfileLock.o)(.text._ZN13nsProfileLock15LockWithSymlinkERK10nsACString+0x0):
In function `nsProfileLock::LockWithSymlink(nsACString const&)':
: multiple definition of `nsProfileLock::LockWithSymlink(nsACString const&)'
../../dist/lib/libprofile_s.a(nsProfileLock.o)(.text._ZN13nsProfileLock15LockWithSymlinkERK10nsACString+0x0):
first defined here
../../dist/lib/libprofdirserviceprovider_s.a(nsProfileLock.o)(.text._ZN13nsProfileLock4LockEP12nsILocalFile+0x0):
In function `nsProfileLock::Lock(nsILocalFile*)':
: multiple definition of `nsProfileLock::Lock(nsILocalFile*)'
../../dist/lib/libprofile_s.a(nsProfileLock.o)(.text._ZN13nsProfileLock4LockEP12nsILocalFile+0x0):
first defined here
collect2: ld returned 1 exit status
make[2]: *** [libprofile.so] Error 1
make[1]: *** [install] Error 2
make: *** [install] Error 2

Expected Results:  
Linked and installed properly

System setup:

LFS 6.0/BLFS system
Linux 2.6.5
Glibc 2.3.3
GCC 3.3.3

configure options:
--prefix=/opt/firefox-0.9 \
--with-x \
--enable-default-toolkit=gtk2 \
--with-system-jpeg \
--with-system-zlib \
--with-system-png \
--with-system-mng \
--disable-calendar \
--disable-mailnews \
--disable-accessibility \
--enable-xft \
--enable-crypto \
--enable-native-uconv \
--enable-extensions \
--enable-image-decoders=all \
--enable-optimize='-march=athlon-xp -O3' \
--enable-reorder \
--enable-strip \
--enable-elf-dynstr-gc \
--enable-svg \
--enable-svg-renderer-libart \
--with-default-mozilla-five-home \
--enable-cpp-rtti \
--disable-pedantic \
--disable-debug \
--disable-logging \
--disable-tests \
--enable-necko-protocols=all"

Tried a build with just the --prefix option (mainly to use the gtk toolkit
instead of gtk2), but it failed on some unrelated coding bug in
nsPasswordManager.cpp.

Have found one other mention of this, on some IRC logs. Was in Spanish (or
possibly French), though, so  I couldn't work out if they resolved it. It seemed
to be a 2.6 kernel and Glibc 2.3.3, though.
(Reporter)

Comment 1

14 years ago
I tried altering the Makefile in profile/build to link against the profile_s.a
in profile/src (I altered $(DIST)/lib to ../src). It linked, but I couldn't
check that it worked properly because of the problem with nsPasswordManager.cpp.

Comment 2

14 years ago

*** This bug has been marked as a duplicate of 248451 ***
Status: UNCONFIRMED → RESOLVED
Last Resolved: 14 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.