September 26, 2019 [Issue 20244] New: New dmd option -preview=noXlinker does not work on Linux to build a simple D application | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=20244 Issue ID: 20244 Summary: New dmd option -preview=noXlinker does not work on Linux to build a simple D application Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody@puremagic.com Reporter: Alan.W.Irwin1234@gmail.com I built dmd from git master branch HEAD today to evaluate this option, and unfortunately it failed on my first test which was as follows: software@merlin> cat >main.d import std.stdio; void main() { writeln("Hello, world without explicit compilations!"); } Build and run the example without the -preview=noXlinker option to demonstrate my built version of dmd is working correctly without this flag for this source code software@merlin> /home/software/dmd/install/linux/bin64/dmd main.d software@merlin> ./main Hello, world without explicit compilations! Now attempt to build with the -preview=noXlinker option software@merlin> /home/software/dmd/install/linux/bin64/dmd -preview=noXlinker main.d gcc: error: unrecognized command line option ‘--export-dynamic’; did you mean ‘-export-dynamic’? Error: linker exited with status 1 Try again with more verbose output to see what the underlying gcc command is software@merlin> /home/software/dmd/install/linux/bin64/dmd -preview=noXlinker main.d -v predefs DigitalMars Posix linux ELFv1 CRuntime_Glibc CppRuntime_Gcc LittleEndian D_Version2 all D_SIMD D_InlineAsm_X86_64 X86_64 D_LP64 D_PIC assert D_ModuleInfo D_Exceptions D_TypeInfo D_HardFloat binary /home/software/dmd/install/linux/bin64/dmd version v2.088.0-238-g73f37547d config /home/software/dmd/install/linux/bin64/dmd.conf DFLAGS -I/home/software/dmd/install/linux/bin64/../../src/phobos -I/home/software/dmd/install/linux/bin64/../../src/druntime/import -L-L/home/software/dmd/install/linux/bin64/../lib64 -L--export-dynamic -fPIC parse main importall main import object (/home/software/dmd/install/linux/bin64/../../src/druntime/import/object.d) import core.internal.hash (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/hash.d) import core.internal.traits (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/traits.d) import core.internal.convert (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/convert.d) import core.internal.entrypoint (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/entrypoint.d) import core.internal.array.appending (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/array/appending.d) import core.internal.array.comparison (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/array/comparison.d) import core.internal.array.equality (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/array/equality.d) import core.internal.array.casting (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/array/casting.d) import core.internal.array.concatenation (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/array/concatenation.d) import core.internal.array.construction (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/array/construction.d) import core.internal.array.capacity (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/array/capacity.d) import core.internal.dassert (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/dassert.d) import core.internal.destruction (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/destruction.d) import core.internal.moving (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/moving.d) import core.internal.postblit (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/postblit.d) import core.internal.switch_ (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/switch_.d) import std.stdio (/home/software/dmd/install/linux/bin64/../../src/phobos/std/stdio.d) import core.stdc.stddef (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/stddef.d) import std.algorithm.mutation (/home/software/dmd/install/linux/bin64/../../src/phobos/std/algorithm/mutation.d) import std.traits (/home/software/dmd/install/linux/bin64/../../src/phobos/std/traits.d) import std.meta (/home/software/dmd/install/linux/bin64/../../src/phobos/std/meta.d) import std.range.primitives (/home/software/dmd/install/linux/bin64/../../src/phobos/std/range/primitives.d) import std.functional (/home/software/dmd/install/linux/bin64/../../src/phobos/std/functional.d) import std.typecons (/home/software/dmd/install/linux/bin64/../../src/phobos/std/typecons.d) import std.format (/home/software/dmd/install/linux/bin64/../../src/phobos/std/format.d) import core.vararg (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/vararg.d) import core.stdc.stdarg (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/stdarg.d) import core.stdc.stdlib (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/stdlib.d) import core.stdc.config (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/config.d) import std.exception (/home/software/dmd/install/linux/bin64/../../src/phobos/std/exception.d) import std.internal.attributes (/home/software/dmd/install/linux/bin64/../../src/phobos/std/internal/attributes.d) import core.stdc.stdio (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/stdio.d) import core.stdc.stdint (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/stdint.d) import core.stdc.signal (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/signal.d) import core.stdc.wchar_ (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/wchar_.d) import core.stdc.time (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/time.d) import core.sys.posix.sys.types (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/sys/posix/sys/types.d) import core.sys.posix.config (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/sys/posix/config.d) semantic main import core.atomic (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/atomic.d) import core.internal.attributes (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/attributes.d) import core.internal.atomic (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/atomic.d) import core.stdc.errno (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/errno.d) entry main main.d semantic2 main semantic3 main import std.utf (/home/software/dmd/install/linux/bin64/../../src/phobos/std/utf.d) import core.exception (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/exception.d) import core.internal.string (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/internal/string.d) import std.algorithm.comparison (/home/software/dmd/install/linux/bin64/../../src/phobos/std/algorithm/comparison.d) import core.stdc.string (/home/software/dmd/install/linux/bin64/../../src/druntime/import/core/stdc/string.d) code main function D main function main._d_cmain!().main function std.stdio.writeln!string.writeln function std.stdio.File.LockingTextWriter.put!string.put function std.stdio.File.LockingTextWriter.put!string.put.__dgliteral2 function std.stdio.trustedFwrite!char.trustedFwrite function std.exception.enforce!(ErrnoException).enforce!int.enforce function std.exception.bailOut!(ErrnoException).bailOut function object.idup!(const(char)).idup function object._trustedDup!(const(char), immutable(char))._trustedDup function object._dup!(const(char), immutable(char))._dup function object._doPostblit!(immutable(char))._doPostblit function object._getPostblit!(immutable(char))._getPostblit function std.stdio.File.LockingTextWriter.put!(immutable(char)).put function std.stdio.File.LockingTextWriter.put!(immutable(char)).put.trustedFPUTC function std.stdio.File.LockingTextWriter.put!(immutable(char)).put.trustedFPUTWC function std.stdio.File.LockingTextWriter.put!char.put function std.stdio.File.LockingTextWriter.put!char.put.trustedFPUTC function std.stdio.File.LockingTextWriter.put!char.put.trustedFPUTWC gcc main.o -o main -m64 --export-dynamic -L/home/software/dmd/install/linux/bin64/../lib64 -Xlinker -Bstatic -lphobos2 -Xlinker -Bdynamic -lpthread -lm -lrt -ldl gcc: error: unrecognized command line option ‘--export-dynamic’; did you mean ‘-export-dynamic’? Error: linker exited with status 1 Try that gcc command with -Xlinker in front of that --export-dynamic option software@merlin> gcc main.o -o main -m64 -Xlinker --export-dynamic -L/home/software/dmd/install/linux/bin64/../lib64 -Xlinker -Bstatic -lphobos2 -Xlinker -Bdynamic -lpthread -lm -lrt -ldl software@merlin> ./main Hello, world without explicit compilations! I am pretty sure from these results that the implementation of this new option has a list of gcc flags that are internally generated by dmd on Linux that must have the -Xlinker option preceding them. Obviously from the above results -Bstatic and -Bdynamic are on that list. So it appears to me the fix for this issue would be to add --export-dynamic (note the two leading hyphens) to that list. I really do need this flag so I hope this fix is given some priority. -- |
Copyright © 1999-2021 by the D Language Foundation