[Interest] building Qt 4.8.7 with gcc 5 and link-time optimisation on Linux

René J.V. Bertin rjvbertin at gmail.com
Wed Jul 22 19:50:27 CEST 2015


Hi,

I'm experimenting with gcc-5.1 and link-time optimisation on Linux. I configure with

CC = gcc-5
CXX = g++-5
CFLAGS += -O3 -ftracer -ftree-vectorize -flto -fuse-linker-plugin
CXXFLAGS += -O3 -ftracer -ftree-vectorize -flto -fuse-linker-plugin
LDFLAGS += -O3 -ftracer -ftree-vectorize -flto -fuse-linker-plugin

and get as far as libQtScript which fails to link:

/usr/bin/g++-5 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed -O3 -ftracer -ftree-vectorize -flto -fuse-linker-plugin -fno-exceptions -Wl,--no-undefined -Wl,-O1 -shared -Wl,-Bsymbolic-functions -Wl,-soname,libQtScript.so.4 -o libQtScript.so.4.8.7 obj/release/pcre_compile.o obj/release/pcre_exec.o obj/release/pcre_tables.o obj/release/pcre_ucp_searchfuncs.o obj/release/pcre_xclass.o obj/release/JSBase.o obj/release/JSCallbackConstructor.o obj/release/JSCallbackFunction.o obj/release/JSCallbackObject.o obj/release/JSClassRef.o obj/release/JSContextRef.o obj/release/JSObjectRef.o obj/release/JSStringRef.o obj/release/JSValueRef.o obj/release/OpaqueJSString.o obj/release/ARMAssembler.o obj/release/MacroAssemblerARM.o obj/release/CodeBlock.o obj/release/JumpTable.o obj/release/Opcode.o obj/release/SamplingTool.o obj/release/StructureStubInfo.o obj/release/BytecodeGenerator.o obj/release/NodesCodegen.o obj/release/DebuggerActivation.o obj/release/DebuggerCallFrame.o obj/release/Debugger.o obj/release/CallFrame.o obj/release/Interpreter.o obj/release/RegisterFile.o obj/release/ExecutableAllocatorFixedVMPool.o obj/release/ExecutableAllocatorPosix.o obj/release/ExecutableAllocatorSymbian.o obj/release/ExecutableAllocatorWin.o obj/release/ExecutableAllocator.o obj/release/JITArithmetic.o obj/release/JITCall.o obj/release/JIT.o obj/release/JITOpcodes.o obj/release/JITPropertyAccess.o obj/release/JITStubs.o obj/release/Lexer.o obj/release/Nodes.o obj/release/ParserArena.o obj/release/Parser.o obj/release/Profile.o obj/release/ProfileGenerator.o obj/release/ProfileNode.o obj/release/Profiler.o obj/release/ArgList.o obj/release/Arguments.o obj/release/ArrayConstructor.o obj/release/ArrayPrototype.o obj/release/BooleanConstructor.o obj/release/BooleanObject.o obj/release/BooleanPrototype.o obj/release/CallData.o obj/release/Collector.o obj/release/CommonIdentifiers.o obj/release/Completion.o obj/release/ConstructData.o obj/release/DateConstructor.o obj/release/DateConversion.o obj/release/DateInstance.o obj/release/DatePrototype.o obj/release/ErrorConstructor.o obj/release/Error.o obj/release/ErrorInstance.o obj/release/ErrorPrototype.o obj/release/ExceptionHelpers.o obj/release/Executable.o obj/release/FunctionConstructor.o obj/release/FunctionPrototype.o obj/release/GetterSetter.o obj/release/GlobalEvalFunction.o obj/release/Identifier.o obj/release/InitializeThreading.o obj/release/InternalFunction.o obj/release/JSActivation.o obj/release/JSAPIValueWrapper.o obj/release/JSArray.o obj/release/JSByteArray.o obj/release/JSCell.o obj/release/JSFunction.o obj/release/JSGlobalData.o obj/release/JSGlobalObject.o obj/release/JSGlobalObjectFunctions.o obj/release/JSImmediate.o obj/release/JSLock.o obj/release/JSNotAnObject.o obj/release/JSNumberCell.o obj/release/JSObject.o obj/release/JSONObject.o obj/release/JSPropertyNameIterator.o obj/release/JSStaticScopeObject.o obj/release/JSString.o obj/release/JSValue.o obj/release/JSVariableObject.o obj/release/JSWrapperObject.o obj/release/LiteralParser.o obj/release/Lookup.o obj/release/MarkStackPosix.o obj/release/MarkStackSymbian.o obj/release/MarkStackWin.o obj/release/MarkStack.o obj/release/MathObject.o obj/release/NativeErrorConstructor.o obj/release/NativeErrorPrototype.o obj/release/NumberConstructor.o obj/release/NumberObject.o obj/release/NumberPrototype.o obj/release/ObjectConstructor.o obj/release/ObjectPrototype.o obj/release/Operations.o obj/release/PropertyDescriptor.o obj/release/PropertyNameArray.o obj/release/PropertySlot.o obj/release/PrototypeFunction.o obj/release/RegExpConstructor.o obj/release/RegExp.o obj/release/RegExpObject.o obj/release/RegExpPrototype.o obj/release/ScopeChain.o obj/release/SmallStrings.o obj/release/StringConstructor.o obj/release/StringObject.o obj/release/StringPrototype.o obj/release/StructureChain.o obj/release/Structure.o obj/release/TimeoutChecker.o obj/release/UString.o obj/release/UStringImpl.o obj/release/Assertions.o obj/release/ByteArray.o obj/release/CurrentTime.o obj/release/DateMath.o obj/release/dtoa.o obj/release/FastMalloc.o obj/release/HashTable.o obj/release/MainThread.o obj/release/MainThreadQt.o obj/release/ThreadingQt.o obj/release/RandomNumber.o obj/release/RefCountedLeakCounter.o obj/release/BlockAllocatorSymbian.o obj/release/RegisterFileAllocatorSymbian.o obj/release/ThreadingNone.o obj/release/Threading.o obj/release/TypeTraits.o obj/release/CollatorDefault.o obj/release/CollatorICU.o obj/release/UTF8.o obj/release/RegexCompiler.o obj/release/RegexInterpreter.o obj/release/RegexJIT.o obj/release/Grammar.o obj/release/TCSystemAlloc.o obj/release/qscriptclass.o obj/release/qscriptclasspropertyiterator.o obj/release/qscriptcontext.o obj/release/qscriptcontextinfo.o obj/release/qscriptengine.o obj/release/qscriptengineagent.o obj/release/qscriptextensionplugin.o obj/release/qscriptprogram.o obj/release/qscriptstring.o obj/release/qscriptvalue.o obj/release/qscriptvalueiterator.o obj/release/qscriptable.o obj/release/qscriptfunction.o obj/release/qscriptobject.o obj/release/qscriptclassobject.o obj/release/qscriptvariant.o obj/release/qscriptqobject.o obj/release/qscriptglobalobject.o obj/release/qscriptactivationobject.o obj/release/qscriptstaticscopeobject.o obj/release/qscriptdeclarativeobject.o obj/release/qscriptdeclarativeclass.o obj/release/qscriptast.o obj/release/qscriptastvisitor.o obj/release/qscriptgrammar.o obj/release/qscriptsyntaxchecker.o obj/release/qscriptlexer.o obj/release/moc_qscriptextensionplugin.o   -L/home/bertin/work/src/Scratch/Qt/q487-test/lib -lQtCore -L/home/bertin/work/src/Scratch/Qt/q487-test/lib -lfontconfig -lpthread  
obj/release/NumberPrototype.o (symbol from plugin): warning: memset used with constant zero length parameter; this could be due to transposed parameters
obj/release/NumberPrototype.o (symbol from plugin): warning: memset used with constant zero length parameter; this could be due to transposed parameters
`cti_vm_throw' referenced in section `.text' of /tmp/cclOGBXF.ltrans0.ltrans.o: defined in discarded section `.text' of obj/release/JITStubs.o (symbol from plugin)
collect2: error: ld returned 1 exit status

Some quick googling only leads to the impression that building with LTO is supported (even suggested as a means to reduce start-up times), but I haven't yet found any explicit instructions on how to activate the feature.

Am I doing something wrong (missing an option to prevent the discarding of .text sections maybe)?

If this were a local build I'd just skip the LTO for QtScript, but the build is to be handled by a LauncPad PPA ....

Thanks,
René


More information about the Interest mailing list