Hallo zusammen,
Ich habe aktuell ein Problem, wo ich schon einige Zeit dran sitze, weil es sich mir nicht erklären lässt, warum folgender Code sich zwischen .net7 und .net8 so unterschiedlich verhält.
Der Code enthält einige Debugausgaben, um das Problem nachvollziehen zu können.
Aufgabe des Codes ist es, den GNU C compiler (gcc) aufzurufen, mit einem leeren Input, damit folgender Output kommt:
Interessant sind für mich dabei ausschließlich die Pfade zwischen
Ich baue das Projekt für .net7 und .net8 (.net6 und älter habe ich nicht installiert, kann es deshalb auch nicht testen).
Unter .net8 habe ich das erwartete Verhalten:
Unter .net7 bekomme ich allerdings einen völlig anderen Output, trotz dass es nur eine gcc Binary auf meinem System gibt (bzw. der Symlink ist nur einmal im PATH.)
Anbei noch alle Instanzen von "gcc" auf meinem System (nicht dass ich da was gravierendes übersehe):
Ich danke euch schon mal für hilfreiche Tipps und wünsche euch auch besinnliche Feiertage
EDIT: Falls ihr das Projekt selber bauen wollt:
Link zum Repo: github.com/Procyon-Systems/Tmd…-macros-and-improve-tests
Mein Testsystem: Ubuntu 23.10.
Dependencies: gcc und die ganzen Entwicklerheader.
EDIT2:
Nachdem ich nun den absoluten Pfad eingegeben habe
Spoiler anzeigen
Run 1:
Run2:
Run3:
Run4:
Run5:
Run6:
Run7:
Was ich bei .net7 immer noch verwirrend finde, ist dass selten bis gar nicht die Ausgabe
Ich habe aktuell ein Problem, wo ich schon einige Zeit dran sitze, weil es sich mir nicht erklären lässt, warum folgender Code sich zwischen .net7 und .net8 so unterschiedlich verhält.
C#-Quellcode
- /// <summary>
- /// Simple method to find and parse the compiler's system search paths.
- /// </summary>
- public void FindIncludePaths()
- {
- if (s_searchPaths.Count > 0) { return; }
- using (var proc = Process.Start(new ProcessStartInfo {
- Arguments = "-E -Wp,-v -",
- FileName = "gcc",
- RedirectStandardError = true,
- RedirectStandardInput = true,
- RedirectStandardOutput = true
- })) {
- // Write empty message to gcc so it can continue
- proc.StandardInput.WriteLine();
- proc.StandardInput.Flush();
- const string searchString = "#include <...> search starts here:";
- const string endOfSearchString = "End of search list.";
- // Now fetch GCC's output for parsing.
- var hasFoundSysIncludes = false;
- while (proc.StandardError.Peek() != -1) {
- var line = proc.StandardError.ReadLine();
- if (line is null) { break; }
- Console.WriteLine($"Got input from compiler: { line }");
- if (!hasFoundSysIncludes) {
- hasFoundSysIncludes = line.Equals(searchString, StringComparison.InvariantCultureIgnoreCase);
- } else {
- if (line.Equals(endOfSearchString, StringComparison.InvariantCultureIgnoreCase)) { break; }
- s_searchPaths.Add(line.Trim());
- }
- }
- }
- s_searchPaths.ForEach(x => Console.WriteLine($"==========>> Found compiler search path { x }"));
- if (s_searchPaths.Count == 0) { Console.Error.WriteLine("==========>> !! NO COMPILER SEARCH PATHS FOUND! !!"); }
- }
Der Code enthält einige Debugausgaben, um das Problem nachvollziehen zu können.
Aufgabe des Codes ist es, den GNU C compiler (gcc) aufzurufen, mit einem leeren Input, damit folgender Output kommt:
C-Quellcode
- simon@ODIN: /home/simon/source/Tmds.LibC/test/Tmds.LibC.Tests git:(master) ✗
- ➜ echo "" | gcc -E -Wp,-v - >/dev/null
- ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
- ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"
- #include "..." search starts here:
- #include <...> search starts here:
- /usr/lib/gcc/x86_64-linux-gnu/13/include
- /usr/local/include
- /usr/include/x86_64-linux-gnu
- /usr/include
- End of search list.
Interessant sind für mich dabei ausschließlich die Pfade zwischen
#include <...>
und End of search list.
Ich baue das Projekt für .net7 und .net8 (.net6 und älter habe ich nicht installiert, kann es deshalb auch nicht testen).
Unter .net8 habe ich das erwartete Verhalten:
Quellcode
- Starting test execution, please wait...
- A total of 1 test files matched the specified pattern.
- /home/simon/source/Tmds.LibC/test/Tmds.LibC.Tests/bin/Debug/net8.0/Tmds.LibC.Tests.dll
- [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.4.0 (64-bit .NET 8.0.0)
- [xUnit.net 00:00:00.25] Discovering: Tmds.LibC.Tests
- [xUnit.net 00:00:00.28] Discovered: Tmds.LibC.Tests
- [xUnit.net 00:00:00.28] Starting: Tmds.LibC.Tests
- Test Environment: ubuntu-23.10
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"
- Got input from compiler: #include "..." search starts here:
- Got input from compiler: #include <...> search starts here:
- Got input from compiler: /usr/lib/gcc/x86_64-linux-gnu/13/include
- Got input from compiler: /usr/local/include
- Got input from compiler: /usr/include/x86_64-linux-gnu
- Got input from compiler: /usr/include
- Got input from compiler: End of search list.
- ==========>> Found compiler search path /usr/lib/gcc/x86_64-linux-gnu/13/include
- ==========>> Found compiler search path /usr/local/include
- ==========>> Found compiler search path /usr/include/x86_64-linux-gnu
- ==========>> Found compiler search path /usr/include
Unter .net7 bekomme ich allerdings einen völlig anderen Output, trotz dass es nur eine gcc Binary auf meinem System gibt (bzw. der Symlink ist nur einmal im PATH.)
Quellcode
- Starting test execution, please wait...
- A total of 1 test files matched the specified pattern.
- /home/simon/source/Tmds.LibC/test/Tmds.LibC.Tests/bin/Debug/net7.0/Tmds.LibC.Tests.dll
- [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.4.0 (64-bit .NET 7.0.14)
- [xUnit.net 00:00:00.27] Discovering: Tmds.LibC.Tests
- [xUnit.net 00:00:00.29] Discovered: Tmds.LibC.Tests
- [xUnit.net 00:00:00.30] Starting: Tmds.LibC.Tests
- Test Environment: ubuntu-23.10
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"
- Got input from compiler: #include "..." search starts here:
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"
- Got input from compiler: #include "..." search starts here:
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
- Got input from compiler: ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"
- Got input from compiler: #include "..." search starts here:
- Got input from compiler: #include <...> search starts here:
- Got input from compiler: /usr/lib/gcc/x86_64-linux-gnu/13/include
- Got input from compiler: /usr/local/include
- Got input from compiler: /usr/include/x86_64-linux-gnu
- ==========>> Found compiler search path /usr/lib/gcc/x86_64-linux-gnu/13/include
- ==========>> Found compiler search path /usr/local/include
- ==========>> Found compiler search path /usr/include/x86_64-linux-gnu
Anbei noch alle Instanzen von "gcc" auf meinem System (nicht dass ich da was gravierendes übersehe):
Quellcode
- simon@ODIN: /home/simon/source/Tmds.LibC/test/Tmds.LibC.Tests git:(master) ✗
- ➜ which gcc
- /usr/bin/gcc
- simon@ODIN: /home/simon/source/Tmds.LibC/test/Tmds.LibC.Tests git:(master) ✗
- ➜ find / -not \( -path "/mnt" -type d -prune \) -name "gcc" 2>/dev/null
- /home/simon/source/linux/scripts/dummy-tools/gcc
- /home/simon/source/WSL2-Linux-Kernel/scripts/dummy-tools/gcc
- /usr/include/boost/mpl/aux_/preprocessed/gcc
- /usr/libexec/gcc
- /usr/lib/gcc
- /usr/share/doc/gcc-13-base/gcc
- /usr/share/doc/gcc
- /usr/share/doc/gcc-11-base/gcc
- /usr/share/doc/gcc-12-mips-linux-gnu-base/gcc
- /usr/share/doc/gcc-12-base/gcc
- /usr/share/doc/gcc-13-powerpc64-linux-gnu-base/gcc
- /usr/share/doc/gcc-13-arm-linux-gnueabihf-base/gcc
- /usr/share/doc/gcc-13-aarch64-linux-gnu-base/gcc
- /usr/share/doc/gcc-9-base/gcc
- /usr/share/doc/gcc-13-i686-linux-gnu-base/gcc
- /usr/share/doc/gcc-13-powerpc-linux-gnu-base/gcc
- /usr/share/bash-completion/completions/gcc
- /usr/share/gcc
- /usr/bin/gcc
- simon@ODIN: /home/simon/source/Tmds.LibC/test/Tmds.LibC.Tests git:(master) ✗
- ➜ ls -lah $(which gcc)
- lrwxrwxrwx 1 root root 6 Aug 11 20:28 /usr/bin/gcc -> gcc-13
- simon@ODIN: /home/simon/source/Tmds.LibC/test/Tmds.LibC.Tests git:(master) ✗
- ➜ ls -lah $(which gcc-13)
- lrwxrwxrwx 1 root root 23 Sep 24 10:44 /usr/bin/gcc-13 -> x86_64-linux-gnu-gcc-13
- simon@ODIN: /home/simon/source/Tmds.LibC/test/Tmds.LibC.Tests git:(master) ✗
- ➜ ls -lah $(which x86_64-linux-gnu-gcc-13)
- -rwxr-xr-x 1 root root 995K Sep 24 10:44 /usr/bin/x86_64-linux-gnu-gcc-13
Ich danke euch schon mal für hilfreiche Tipps und wünsche euch auch besinnliche Feiertage
EDIT: Falls ihr das Projekt selber bauen wollt:
Link zum Repo: github.com/Procyon-Systems/Tmd…-macros-and-improve-tests
Mein Testsystem: Ubuntu 23.10.
Dependencies: gcc und die ganzen Entwicklerheader.
EDIT2:
Nachdem ich nun den absoluten Pfad eingegeben habe
/usr/bin/gcc
habe ich immer noch ein ähnliches Verhalten, allerdings ist .net7 da nicht wirklich zuverlässig. Mal kommen 2 Pfade, mal 3 und mal 4.Run 1:
Run2:
Run3:
Run4:
Run5:
Run6:
Run7:
Was ich bei .net7 immer noch verwirrend finde, ist dass selten bis gar nicht die Ausgabe
Got input from compiler: End of search list.
kommt :/. Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)
Meine Firma: Procyon Systems
Selbstständiger Softwareentwickler & IT-Techniker.
Meine Firma: Procyon Systems
Selbstständiger Softwareentwickler & IT-Techniker.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „siycah“ ()