VirtualBox

Ticket #15073 (closed defect: fixed)

Opened 4 years ago

Last modified 4 years ago

Building 5.0.14 on FC17 failure: undefined reference to RTLogRelDefaultInstance

Reported by: tlhackque Owned by:
Component: other Version: VirtualBox 5.0.14
Keywords: Cc:
Guest type: other Host type: other

Description

I build VirtualBox from source on FC17. Last successful build was 4.3.26.

Upgrading to 5.0.14. Built & installed Qt 4.8.6. Rest of build environment is unchanged. (Yes, I ran configure and sourced env.sh.)

Attempted to build VirtualBox, failed. Clues would be appreciated.

Fails here (full build log attached):

tstAsmStructs: SUCCESS
kBuild: Linking VBoxSharedClipboard
kBuild: Linking VBoxGuestPropSvc
kBuild: Linking VBoxGuestControlSvc
kBuild: Linking VBoxDragAndDropSvc
kBuild: Linking VBoxHostChannel
kBuild: Installing DbgPlugInDiggers => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/DbgPlugInDiggers.so
kBuild: Linking VBoxXPCOMIPCC
kBuild: Linking VBoxRemPrimary
kBuild: Linking tstVD
kBuild: Linking tstVD-2
kBuild: Linking tstVDCopy
kBuild: Linking tstVDSnap
kBuild: Linking tstVDShareable
kBuild: Linking tstVDIo
kBuild: Linking tstInstrEmul
kBuild: Linking tstVMM
kBuild: Linking tstVMM-HM
kBuild: Linking tstVMMFork
kBuild: Linking tstCFGM
kBuild: Linking tstSSM
kBuild: Linking tstVMREQ
kBuild: Linking tstMMHyperHeap
kBuild: Linking tstAnimate
kBuild: Linking tstMicro
kBuild: Linking tstPDMAsyncCompletion
kBuild: Linking tstPDMAsyncCompletionStress
kBuild: Linking tstUsbMouse
kBuild: Linking tstnsIFileTest
kBuild: Linking tstTestArray
kBuild: Linking tstTestAutoLock
kBuild: Linking tstTestCOMPtr
kBuild: Linking tstTestCOMPtrEq
kBuild: Linking tstTestCRT
kBuild: Linking tstTestFactory
/opt/VirtualBox/VBoxREM.so: undefined reference to `RTLogRelDefaultInstance'
collect2: ld returned 1 exit status
kmk: *** [/home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/obj/tstUsbMouse/tstUsbMouse] Error 1
The failing command:
@g++               '-Wl,-rpath,/opt/VirtualBox' '-Wl,-rpath,/opt/VirtualBox'  -Wl,-z,noexecstack,-z,relro -Wl,--as-needed -m64   -o /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/obj/tstUsbMouse/tstUsbMouse /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/obj/tstUsbMouse/tstUsbMouse.o /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/obj/tstUsbMouse/dt/UsbMouse.o     /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/VBoxVMM.so   /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/VBoxRT.so   -lpthread   -lm   -lrt   -ldl
kmk: *** Waiting for unfinished jobs....

Attachments

vbuild.log Download (119.3 KB) - added by tlhackque 4 years ago.
Build Log
AutoConfig.kmk Download (2.1 KB) - added by tlhackque 4 years ago.
Autoconfig.cmk
env.sh Download (988 bytes) - added by tlhackque 4 years ago.
env.sh

Change History

Changed 4 years ago by tlhackque

Build Log

Changed 4 years ago by tlhackque

Autoconfig.cmk

Changed 4 years ago by tlhackque

env.sh

comment:1 Changed 4 years ago by frank

  • Status changed from new to closed
  • Resolution set to worksforme

Sorry, Fedora 17 is not supported by upstream anymore. We build 5.0.x on EL5, EL6, EL7, Fedora 18, several Ubuntu versions and other distributions and don't see a problem. You might want to go to forums.virtualbox.org to ask for help there.

comment:2 Changed 4 years ago by tlhackque

  • Status changed from closed to reopened
  • Resolution worksforme deleted

After some digging, I believe that this doesn't have anything to do with FC17. It appears that the source kit has an issue.

As far as I can tell, the symbol RTLogRelDefaultInstance is defined in vboxguest/common/log/logrel.c.

In 5.x, it looks like the name was changed to RTLogRelGetDefaultInstance (Get was added)

It appears that the tests, which are built by default in the source kit, still use the old name.

So attempts to link the tests fail. Either the tests weren't updated, or the source kit has the old tests.

I hacked Config.kmk by setting

VBOX_WITH_VALIDATIONKIT =
VBOX_WITH_TESTCASES =

where they're set to 1.

And the build succeeds. I'm happy not building the validation suite.

I didn't track down which of the following contribute to the issue, but someone should:

 find VirtualBox-5.0.14 -name '*.c' -o -name '*.cpp' -exec grep -H RTLogDefaultInstance {} \;
VirtualBox-5.0.14/src/recompiler/VBoxREMWrapper.cpp:    { "RTLogDefaultInstance",                   (void *)(uintptr_t)&RTLogDefaultInstance,           NULL,                                       0,                                                     REMFNDESC_FLAGS_RET_INT,    sizeof(PRTLOGGER),  NULL },
VirtualBox-5.0.14/src/recompiler/VBoxREMWrapper.cpp:    { "RTLogDefaultInstanceEx",                 (void *)(uintptr_t)&RTLogDefaultInstance,           &g_aArgsRTLogGetDefaultInstanceEx[0],       RT_ELEMENTS(g_aArgsRTLogGetDefaultInstanceEx),         REMFNDESC_FLAGS_RET_INT,    sizeof(PRTLOGGER),  NULL },
VirtualBox-5.0.14/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibRuntimeXF86.cpp:RTDECL(PRTLOGGER) RTLogDefaultInstanceEx(uint32_t fFlagsAndGroup)
VirtualBox-5.0.14/src/VBox/Main/src-client/MachineDebuggerImpl.cpp:    const PRTLOGGER pLogInstance = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/HostDrivers/Support/SUPLib.cpp:        { "RTLogDefaultInstance",                   0xefef003b },
VirtualBox-5.0.14/src/VBox/HostDrivers/Support/SUPDrv.cpp:    { "RTLogDefaultInstance",                   (void *)RTLogDefaultInstance },
VirtualBox-5.0.14/src/VBox/HostDrivers/Support/SUPDrv.cpp:    { "RTLogDefaultInstanceEx",                 (void *)RTLogDefaultInstanceEx },
VirtualBox-5.0.14/src/VBox/VMM/VMMR0/VMMR0.cpp:        LogCom(("vmmR0InitVM: before %p\n", RTLogDefaultInstance()));
VirtualBox-5.0.14/src/VBox/VMM/VMMR0/VMMR0.cpp:        LogCom(("vmmR0InitVM: after %p reg\n", RTLogDefaultInstance()));
VirtualBox-5.0.14/src/VBox/VMM/VMMR0/VMMR0.cpp:        LogCom(("vmmR0InitVM: after %p dereg\n", RTLogDefaultInstance()));
VirtualBox-5.0.14/src/VBox/VMM/VMMR0/VMMR0.cpp:        LogCom(("vmmR0InitVM: after %p reg2\n", RTLogDefaultInstance()));
VirtualBox-5.0.14/src/VBox/VMM/VMMR0/VMMR0.cpp:        LogCom(("vmmR0InitVM: after %p dereg2\n", RTLogDefaultInstance()));
VirtualBox-5.0.14/src/VBox/VMM/VMMR3/DBGFLog.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/VMM/VMMR3/VMM.cpp:    PRTLOGGER pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/VMM/VMMR3/VMM.cpp:    PRTLOGGER const pDefault = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp:    pHlp->pLogger     = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp:        pHlp->pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/testcase/tstLdr-4.cpp:    else if (!strcmp(pszSymbol, "RTLogDefaultInstance") || !strcmp(pszSymbol, "_RTLogDefaultInstance"))
VirtualBox-5.0.14/src/VBox/Runtime/testcase/tstLdr-4.cpp:        *pValue = (uintptr_t)RTLogDefaultInstance;
VirtualBox-5.0.14/src/VBox/Runtime/testcase/tstPrfRT.cpp:     * RTLogDefaultInstance()
VirtualBox-5.0.14/src/VBox/Runtime/testcase/tstPrfRT.cpp:    ITERATE(RT_NOTHING, RTLogDefaultInstance();, RT_NOTHING, 1000000);
VirtualBox-5.0.14/src/VBox/Runtime/testcase/tstPrfRT.cpp:    PrintResult(u64TotalTS, u64MaxTS, u64MinTS, i, "RTLogDefaultInstance");
VirtualBox-5.0.14/src/VBox/Runtime/VBox/logbackdoor-redirect.cpp:RTDECL(PRTLOGGER) RTLogDefaultInstance(void)
VirtualBox-5.0.14/src/VBox/Runtime/VBox/logbackdoor-redirect.cpp:RTDECL(PRTLOGGER) RTLogDefaultInstanceEx(uint32_t fFlagsAndGroup)
VirtualBox-5.0.14/src/VBox/Runtime/common/misc/assert.cpp:            pLog = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/misc/assert.cpp:        pLog = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pSrcLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pDstLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp: * Common worker for RTLogDefaultInstance and RTLogDefaultInstanceEx.
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:RTDECL(PRTLOGGER)   RTLogDefaultInstance(void)
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:RT_EXPORT_SYMBOL(RTLogDefaultInstance);
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:RTDECL(PRTLOGGER)   RTLogDefaultInstanceEx(uint32_t fFlagsAndGroup)
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:RT_EXPORT_SYMBOL(RTLogDefaultInstanceEx);
VirtualBox-5.0.14/src/VBox/Runtime/common/log/log.cpp:        pLogger = RTLogDefaultInstance();

comment:3 Changed 4 years ago by frank

The build process you describes complains about RTLogRelDefaultInstance. The complete 5.0.14 tree does not have any occurrence of this symbol. Also, the build error is about /opt/VirtualBox/VBoxREM.so.

I guess the following happens: You have a different version of VirtualBox installed in /opt/VirtualBox. The linker command line includes only explicit references to VBoxVMM.so and VBoxRT.so. As VBoxREM.so is required by VBoxVMM.so but there is no explicit command line for VBoxREM.so specified, the installed version from /opt/VirtualBox is used.

Can you compile the complete tree with the following diff?

--- src/VBox/Devices/Input/testcase/Makefile.kmk        (revision 105220)
+++ src/VBox/Devices/Input/testcase/Makefile.kmk        (working copy)
@@ -15,7 +15,7 @@
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
 
-SUB_DEPTH = ../../../..
+SUB_DEPTH = ../../../../..
 include $(KBUILD_PATH)/subheader.kmk
 
 if defined(VBOX_WITH_TESTCASES) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBOX_ONLY_SDK)
@@ -25,7 +25,7 @@
 tstUsbMouse_DEFS     = VBOX_WITH_VUSB
 tstUsbMouse_INCS     = \
         ../../build
-tstUsbMouse_LIBS     = $(LIB_VMM)
+tstUsbMouse_LIBS     = $(LIB_VMM) $(LIB_REM)
 tstUsbMouse_SOURCES  = \
         tstUsbMouse.cpp \
         ../UsbMouse.cpp

comment:4 Changed 4 years ago by tlhackque

Oops, seems I mistyped the grep. That sent me down the wrong path. Sorry about that.

The behavior has changed since I successfully built & installed 5.0.14.

When I started, /opt/VirtualBox was the installed 4.3.26 (That is, the result of running out/linux.amd64/release/bin/VirtualBox-${VERSION}_OSE-r${REV}.run from that build.) So yes, there would have been a VBoxREM.so there during the build attempt of 5.0.14.

I always build in a subdirectory of a home directory.

I now have 5.0.14 in /opt/VirtualBox, as turning off tests allowed me to complete the build. That's now running, so I can't go back to confirm your theory. But here's what I have done:

Both builds used the files from (copy/pasted from the script I use):

export MAJORVERSION=5.0
export VERSION=${MAJORVERSION}.14
wget http://download.virtualbox.org/virtualbox/$VERSION/VirtualBox-$VERSION.tar.bz2

Since I've unzipped the bz2 file, I can't sha1sum it now. The sha1 of the extracted .tar is 0f502616de448bbf753bd0a17ccf82c2b3732bf1

To see if the successful build/install changed things, I expanded that tar file into an fresh directory and built without your patch.

We die later than before - but it's a different failure. There seem to be two things going on. I've tried to untangle them.

This is plain configure, no patch, NEW VirtualBox in /opt/VirtualBox:

kBuild: Linking tstPDMAsyncCompletion
kBuild: Linking tstPDMAsyncCompletionStress
kBuild: Linking tstUsbMouse
kBuild: Linking tstnsIFileTest
kBuild: Linking tstTestArray
kBuild: Linking tstTestAutoLock
kBuild: Linking tstTestCOMPtr
kBuild: Linking tstTestCOMPtrEq
kBuild: Linking tstTestCRT
kBuild: Linking tstTestFactory
kBuild: Linking tstTestHashtables
kBuild: Linking tstTestID
kBuild: Linking tstTestObserverService
kBuild: Linking tstTestPipes
kBuild: Linking tstTestThreads
kBuild: Linking tstTestXPIDLString
kBuild: Linking tstTestDeque
kBuild: Linking tstTestAutoPtr
kBuild: Linking tstTestMinStringAPI
kBuild: Linking tstTestStrings

[Snip...]

kBuild: Linking tstMediumLock
kBuild: Linking tstGuid
kBuild: Linking VBoxSVC
kBuild: Installing tstInstrEmul => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/tstInstrEmul
kBuild: Installing tstVMM => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/tstVMM
kBuild: Installing tstVMM-HM => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/tstVMM-HM
kBuild: Installing tstVMMFork => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/tstVMMFork
kBuild: Installing tstCFGM => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/testcase/tstCFGM
kBuild: Installing tstSSM => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/testcase/tstSSM
kBuild: Installing tstVMREQ => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/tstVMREQ
kBuild: Installing tstMMHyperHeap => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/testcase/tstMMHyperHeap
kBuild: Installing tstAnimate => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/tstAnimate
kBuild: Installing tstMicro => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/tstMicro
kBuild: Installing tstPDMAsyncCompletion => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/tstPDMAsyncCompletion
kBuild: Installing tstPDMAsyncCompletionStress => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/tstPDMAsyncCompletionStress
kBuild: Installing tstUsbMouse => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/testcase/tstUsbMouse
kBuild: Linking VBoxTestOGL
kBuild: Linking VBoxManage
kBuild: Linking VBoxBalloonCtrl
kBuild: Linking VBoxAutostart
kBuild: Linking tstHeadless
kBuild: Linking tstSSLCertDownloads
kBuild: Installing tstnsIFileTest => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/testcase/tstnsIFileTest

[Snip ... ]

Build: Installing tstHeadless => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/testcase/tstHeadless
kBuild: Installing tstSSLCertDownloads => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/tstSSLCertDownloads
kBuild: Installing tstUSBProxyLinux => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/testcase/tstUSBProxyLinux
This is pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6)
 %&-line parsing enabled.
kBuild: Installing VBoxSharedCrOpenGL => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/VBoxSharedCrOpenGL.so
entering extended mode
kBuild: Installing VBoxSVC => /home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/bin/VBoxSVC
kmk: *** [/home/litt/kits/VirtualBox-5.0.14/out/linux.amd64/release/obj/manual/en_US/UserManual.pdf] Error 1
kmk: *** Waiting for unfinished jobs....
kmk: *** Exiting with status 2

Having the new version in /opt/VirtualBox seems to have an effect.

I don't need the documents, and in the course of previous debugging disabled them.

So, I started over from the .tar file, no patch, no docs, still new /opt

# WATCOM=/usr/local/watcom ./configure --disable-docs

This completes.

I have also built with the patch applied, and that completes with docs disabled.

But as I can't try the obvious (old VirtualBox in /opt, docs disabled), we don't know if the patch cures the original symptom. It doesn't seem to do any harm.

Turning off the doc build can't have anything to do with the original undefined symbol, so we have to assume that was cured by installing the new build. (After being bypassed by building without tests.)

Thanks for trying to figure this out.

comment:5 Changed 4 years ago by frank

  • Status changed from reopened to closed
  • Resolution set to fixed

The diff I posted would indeed solve your above problem as long as you have VBox 4.3.x installed in /opt/VirtualBox. There is one additional diff required:

--- src/VBox/Debugger/Makefile.kmk      (revision 105224)
+++ src/VBox/Debugger/Makefile.kmk      (revision 105225)
@@ -123,6 +123,7 @@
 tstVBoxDbg_SOURCES      = testcase/tstVBoxDbg.cpp
 tstVBoxDbg_LIBS         = \
        $(LIB_VMM) \
+       $(LIB_REM) \
        $(LIB_RUNTIME)
   ifeq ($(KBUILD_TARGET),win)
 tstVBoxDbg_LIBS        += \

Both fixes will be included in the next 5.0.x maintenance release.

The docs build error should be visible in out/linux.amd64/release/obj/manual/en_US/UserManual.log. I guess some TeX font package is missing.

Note: See TracTickets for help on using tickets.

www.oracle.com
ContactPrivacy policyTerms of Use