file not found on Ubuntu #1

Description

@thejoshwolfe
josh@jash:~/dev/zig$ mkdir build
josh@jash:~/dev/zig$ cd build
josh@jash:~/dev/zig/build$ cmake ..
-- The CXX compiler identification is GNU 5.2.1
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Configuring zig version 0.0.0
-- Found LLVM: -lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMBitWriter -lLLVMIRReader -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMBPFAsmPrinter -lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUUtils -lLLVMAMDGPUDesc -lLLVMAMDGPUInfo -lLLVMAMDGPUAsmPrinter -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMMIRParser -lLLVMAsmParser -lLLVMLibDriver -lLLVMOption -lLLVMDebugInfoPDB -lLLVMTableGen -lLLVMOrcJIT -lLLVMLineEditor -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMDebugInfoDWARF -lLLVMPasses -lLLVMipo -lLLVMVectorize -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMTarget -lLLVMScalarOpts -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMInstCombine -lLLVMInstrumentation -lLLVMTransformUtils -lLLVMipa -lLLVMMC -lLLVMAnalysis -lLLVMCore -lLLVMSupport;-lz -lpthread -lffi -ledit -ltinfo -ldl -lm -- Configuring done
-- Generating done
-- Build files have been written to: /home/josh/dev/zig/build
josh@jash:~/dev/zig/build$ make
Scanning dependencies of target run_tests
[ 7%] Building CXX object CMakeFiles/run_tests.dir/src/buffer.cpp.o
[ 15%] Building CXX object CMakeFiles/run_tests.dir/src/util.cpp.o
[ 23%] Building CXX object CMakeFiles/run_tests.dir/src/os.cpp.o
[ 30%] Building CXX object CMakeFiles/run_tests.dir/test/standalone.cpp.o
Linking CXX executable run_tests
[ 30%] Built target run_tests
Scanning dependencies of target zig
[ 38%] Building CXX object CMakeFiles/zig.dir/src/buffer.cpp.o
[ 46%] Building CXX object CMakeFiles/zig.dir/src/error.cpp.o
[ 53%] Building CXX object CMakeFiles/zig.dir/src/main.cpp.o
[ 61%] Building CXX object CMakeFiles/zig.dir/src/parser.cpp.o
[ 69%] Building CXX object CMakeFiles/zig.dir/src/tokenizer.cpp.o
[ 76%] Building CXX object CMakeFiles/zig.dir/src/util.cpp.o
[ 84%] Building CXX object CMakeFiles/zig.dir/src/codegen.cpp.o
[ 92%] Building CXX object CMakeFiles/zig.dir/src/zig_llvm.cpp.o
[100%] Building CXX object CMakeFiles/zig.dir/src/os.cpp.o
Linking CXX executable zig
[100%] Built target zig
josh@jash:~/dev/zig/build$ ./zig build --output hello ../test/hello.zig Original source:
----------------
#link("c")
extern {
fn puts(s: *mut u8) -> i32;
fn exit(code: i32) -> unreachable;
}
fn _start() -> unreachable {
puts("Hello, world!");
exit(0);
}
Tokens:
---------
NumberSign #
Symbol link
LParen (
StringLiteral "c"
RParen )
Extern extern
LBrace {
Fn fn
Symbol puts
LParen (
Symbol s
Colon :
Star *
Mut mut
Symbol u8
RParen )
Arrow ->
Symbol i32
Semicolon ;
Fn fn
Symbol exit
LParen (
Symbol code
Colon :
Symbol i32
RParen )
Arrow ->
Unreachable unreachable
Semicolon ;
RBrace }
Fn fn
Symbol _start
LParen (
RParen )
Arrow ->
Unreachable unreachable
LBrace {
Symbol puts
LParen (
StringLiteral "Hello, world!"
RParen )
Semicolon ;
Symbol exit
LParen (
NumberLiteral 0
RParen )
Semicolon ;
RBrace }
EOF AST:
------
Root
ExternBlock
FnDecl
FnProto 'puts'
ParamDecl 's'
'mut' PointerType
Type 'u8'
Type 'i32'
FnDecl
FnProto 'exit'
ParamDecl 'code'
Type 'i32'
Type 'unreachable'
FnDef
FnProto '_start'
Type 'unreachable'
Block
FnCallExpression
FnCall 'puts'
StringLiteralExpression 'Hello, world!'
FnCallExpression
FnCall 'exit'
NumberLiteralExpression 0
Semantic Analysis:
--------------------
OK
Code Generation:
------------------
; ModuleID = 'ZigModule'
@0 = private unnamed_addr constant [14 x i8] c"Hello, world!\00"
; Function Attrs: noreturn
declare void @exit(i32) #0
declare i32 @puts(i8*)
; Function Attrs: noreturn nounwind
define void @_start() #1 {
entry:
%0 = call i32 @puts(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0)), !dbg !8
call void @exit(i32 0), !dbg !10
unreachable, !dbg !10
}
attributes #0 = { noreturn }
attributes #1 = { noreturn nounwind }
!llvm.dbg.cu = !{!0}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "zig 0.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
!1 = !DIFile(filename: "hello.zig", directory: "../test")
!2 = !{}
!3 = !{!4}
!4 = !DISubprogram(name: "_start", scope: !1, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: false, function: void ()* @_start, variables: !2)
!5 = !DISubroutineType(types: !6)
!6 = !{!7}
!7 = !DIBasicType(name: "void", encoding: DW_ATE_unsigned)
!8 = !DILocation(line: 8, column: 5, scope: !9)
!9 = distinct !DILexicalBlock(scope: !4, file: !1, line: 7, column: 28)
!10 = !DILocation(line: 9, column: 5, scope: !9)
Link:
-------
OK
josh@jash:~/dev/zig/build$ ./hello bash: ./hello: No such file or directory

The problem is that ./hello is linked against /lib/ld64.so.1 instead of /lib64/ld-linux-x86-64.so.2. This seems to be due to ld being misconfigured on Debian.

This patch can work around the issue:

diff --git a/src/codegen.cpp b/src/codegen.cpp
index d59eff3..8318a43 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -721,6 +721,8 @@ void code_gen_link(CodeGen *g, const char *out_file) {
if (g->is_static) {
args.append("-static");
}
+ args.append("-dynamic-linker");
+ args.append("/lib64/ld-linux-x86-64.so.2");
args.append("-o");
args.append(out_file);
args.append((const char *)buf_ptr(&out_file_o));

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      file not found on Ubuntu #1

      Description

      @thejoshwolfe
      josh@jash:~/dev/zig$ mkdir build
      josh@jash:~/dev/zig$ cd build
      josh@jash:~/dev/zig/build$ cmake ..
      -- The CXX compiler identification is GNU 5.2.1
      -- Check for working CXX compiler: /usr/bin/c++
      -- Check for working CXX compiler: /usr/bin/c++ -- works
      -- Detecting CXX compiler ABI info
      -- Detecting CXX compiler ABI info - done
      -- Detecting CXX compile features
      -- Detecting CXX compile features - done
      Configuring zig version 0.0.0
      -- Found LLVM: -lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMBitWriter -lLLVMIRReader -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMBPFAsmPrinter -lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUUtils -lLLVMAMDGPUDesc -lLLVMAMDGPUInfo -lLLVMAMDGPUAsmPrinter -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMMIRParser -lLLVMAsmParser -lLLVMLibDriver -lLLVMOption -lLLVMDebugInfoPDB -lLLVMTableGen -lLLVMOrcJIT -lLLVMLineEditor -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMDebugInfoDWARF -lLLVMPasses -lLLVMipo -lLLVMVectorize -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMTarget -lLLVMScalarOpts -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMInstCombine -lLLVMInstrumentation -lLLVMTransformUtils -lLLVMipa -lLLVMMC -lLLVMAnalysis -lLLVMCore -lLLVMSupport;-lz -lpthread -lffi -ledit -ltinfo -ldl -lm -- Configuring done
      -- Generating done
      -- Build files have been written to: /home/josh/dev/zig/build
      josh@jash:~/dev/zig/build$ make
      Scanning dependencies of target run_tests
      [ 7%] Building CXX object CMakeFiles/run_tests.dir/src/buffer.cpp.o
      [ 15%] Building CXX object CMakeFiles/run_tests.dir/src/util.cpp.o
      [ 23%] Building CXX object CMakeFiles/run_tests.dir/src/os.cpp.o
      [ 30%] Building CXX object CMakeFiles/run_tests.dir/test/standalone.cpp.o
      Linking CXX executable run_tests
      [ 30%] Built target run_tests
      Scanning dependencies of target zig
      [ 38%] Building CXX object CMakeFiles/zig.dir/src/buffer.cpp.o
      [ 46%] Building CXX object CMakeFiles/zig.dir/src/error.cpp.o
      [ 53%] Building CXX object CMakeFiles/zig.dir/src/main.cpp.o
      [ 61%] Building CXX object CMakeFiles/zig.dir/src/parser.cpp.o
      [ 69%] Building CXX object CMakeFiles/zig.dir/src/tokenizer.cpp.o
      [ 76%] Building CXX object CMakeFiles/zig.dir/src/util.cpp.o
      [ 84%] Building CXX object CMakeFiles/zig.dir/src/codegen.cpp.o
      [ 92%] Building CXX object CMakeFiles/zig.dir/src/zig_llvm.cpp.o
      [100%] Building CXX object CMakeFiles/zig.dir/src/os.cpp.o
      Linking CXX executable zig
      [100%] Built target zig
      josh@jash:~/dev/zig/build$ ./zig build --output hello ../test/hello.zig Original source:
      ----------------
      #link("c")
      extern {
      fn puts(s: *mut u8) -> i32;
      fn exit(code: i32) -> unreachable;
      }
      fn _start() -> unreachable {
      puts("Hello, world!");
      exit(0);
      }
      Tokens:
      ---------
      NumberSign #
      Symbol link
      LParen (
      StringLiteral "c"
      RParen )
      Extern extern
      LBrace {
      Fn fn
      Symbol puts
      LParen (
      Symbol s
      Colon :
      Star *
      Mut mut
      Symbol u8
      RParen )
      Arrow ->
      Symbol i32
      Semicolon ;
      Fn fn
      Symbol exit
      LParen (
      Symbol code
      Colon :
      Symbol i32
      RParen )
      Arrow ->
      Unreachable unreachable
      Semicolon ;
      RBrace }
      Fn fn
      Symbol _start
      LParen (
      RParen )
      Arrow ->
      Unreachable unreachable
      LBrace {
      Symbol puts
      LParen (
      StringLiteral "Hello, world!"
      RParen )
      Semicolon ;
      Symbol exit
      LParen (
      NumberLiteral 0
      RParen )
      Semicolon ;
      RBrace }
      EOF AST:
      ------
      Root
      ExternBlock
      FnDecl
      FnProto 'puts'
      ParamDecl 's'
      'mut' PointerType
      Type 'u8'
      Type 'i32'
      FnDecl
      FnProto 'exit'
      ParamDecl 'code'
      Type 'i32'
      Type 'unreachable'
      FnDef
      FnProto '_start'
      Type 'unreachable'
      Block
      FnCallExpression
      FnCall 'puts'
      StringLiteralExpression 'Hello, world!'
      FnCallExpression
      FnCall 'exit'
      NumberLiteralExpression 0
      Semantic Analysis:
      --------------------
      OK
      Code Generation:
      ------------------
      ; ModuleID = 'ZigModule'
      @0 = private unnamed_addr constant [14 x i8] c"Hello, world!\00"
      ; Function Attrs: noreturn
      declare void @exit(i32) #0
      declare i32 @puts(i8*)
      ; Function Attrs: noreturn nounwind
      define void @_start() #1 {
      entry:
      %0 = call i32 @puts(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0)), !dbg !8
      call void @exit(i32 0), !dbg !10
      unreachable, !dbg !10
      }
      attributes #0 = { noreturn }
      attributes #1 = { noreturn nounwind }
      !llvm.dbg.cu = !{!0}
      !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "zig 0.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
      !1 = !DIFile(filename: "hello.zig", directory: "../test")
      !2 = !{}
      !3 = !{!4}
      !4 = !DISubprogram(name: "_start", scope: !1, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: false, function: void ()* @_start, variables: !2)
      !5 = !DISubroutineType(types: !6)
      !6 = !{!7}
      !7 = !DIBasicType(name: "void", encoding: DW_ATE_unsigned)
      !8 = !DILocation(line: 8, column: 5, scope: !9)
      !9 = distinct !DILexicalBlock(scope: !4, file: !1, line: 7, column: 28)
      !10 = !DILocation(line: 9, column: 5, scope: !9)
      Link:
      -------
      OK
      josh@jash:~/dev/zig/build$ ./hello bash: ./hello: No such file or directory
      

      The problem is that ./hello is linked against /lib/ld64.so.1 instead of /lib64/ld-linux-x86-64.so.2. This seems to be due to ld being misconfigured on Debian.

      This patch can work around the issue:

      diff --git a/src/codegen.cpp b/src/codegen.cpp
      index d59eff3..8318a43 100644
      --- a/src/codegen.cpp
      +++ b/src/codegen.cpp
      @@ -721,6 +721,8 @@ void code_gen_link(CodeGen *g, const char *out_file) {
      if (g->is_static) {
      args.append("-static");
      }
      + args.append("-dynamic-linker");
      + args.append("/lib64/ld-linux-x86-64.so.2");
      args.append("-o");
      args.append(out_file);
      args.append((const char *)buf_ptr(&out_file_o));
      

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        No labels
        No labels

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          file not found on Ubuntu #1

          Description

          @thejoshwolfe
          josh@jash:~/dev/zig$ mkdir build
          josh@jash:~/dev/zig$ cd build
          josh@jash:~/dev/zig/build$ cmake ..
          -- The CXX compiler identification is GNU 5.2.1
          -- Check for working CXX compiler: /usr/bin/c++
          -- Check for working CXX compiler: /usr/bin/c++ -- works
          -- Detecting CXX compiler ABI info
          -- Detecting CXX compiler ABI info - done
          -- Detecting CXX compile features
          -- Detecting CXX compile features - done
          Configuring zig version 0.0.0
          -- Found LLVM: -lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMBitWriter -lLLVMIRReader -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMBPFAsmPrinter -lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUUtils -lLLVMAMDGPUDesc -lLLVMAMDGPUInfo -lLLVMAMDGPUAsmPrinter -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMMIRParser -lLLVMAsmParser -lLLVMLibDriver -lLLVMOption -lLLVMDebugInfoPDB -lLLVMTableGen -lLLVMOrcJIT -lLLVMLineEditor -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMDebugInfoDWARF -lLLVMPasses -lLLVMipo -lLLVMVectorize -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMTarget -lLLVMScalarOpts -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMInstCombine -lLLVMInstrumentation -lLLVMTransformUtils -lLLVMipa -lLLVMMC -lLLVMAnalysis -lLLVMCore -lLLVMSupport;-lz -lpthread -lffi -ledit -ltinfo -ldl -lm -- Configuring done
          -- Generating done
          -- Build files have been written to: /home/josh/dev/zig/build
          josh@jash:~/dev/zig/build$ make
          Scanning dependencies of target run_tests
          [ 7%] Building CXX object CMakeFiles/run_tests.dir/src/buffer.cpp.o
          [ 15%] Building CXX object CMakeFiles/run_tests.dir/src/util.cpp.o
          [ 23%] Building CXX object CMakeFiles/run_tests.dir/src/os.cpp.o
          [ 30%] Building CXX object CMakeFiles/run_tests.dir/test/standalone.cpp.o
          Linking CXX executable run_tests
          [ 30%] Built target run_tests
          Scanning dependencies of target zig
          [ 38%] Building CXX object CMakeFiles/zig.dir/src/buffer.cpp.o
          [ 46%] Building CXX object CMakeFiles/zig.dir/src/error.cpp.o
          [ 53%] Building CXX object CMakeFiles/zig.dir/src/main.cpp.o
          [ 61%] Building CXX object CMakeFiles/zig.dir/src/parser.cpp.o
          [ 69%] Building CXX object CMakeFiles/zig.dir/src/tokenizer.cpp.o
          [ 76%] Building CXX object CMakeFiles/zig.dir/src/util.cpp.o
          [ 84%] Building CXX object CMakeFiles/zig.dir/src/codegen.cpp.o
          [ 92%] Building CXX object CMakeFiles/zig.dir/src/zig_llvm.cpp.o
          [100%] Building CXX object CMakeFiles/zig.dir/src/os.cpp.o
          Linking CXX executable zig
          [100%] Built target zig
          josh@jash:~/dev/zig/build$ ./zig build --output hello ../test/hello.zig Original source:
          ----------------
          #link("c")
          extern {
          fn puts(s: *mut u8) -> i32;
          fn exit(code: i32) -> unreachable;
          }
          fn _start() -> unreachable {
          puts("Hello, world!");
          exit(0);
          }
          Tokens:
          ---------
          NumberSign #
          Symbol link
          LParen (
          StringLiteral "c"
          RParen )
          Extern extern
          LBrace {
          Fn fn
          Symbol puts
          LParen (
          Symbol s
          Colon :
          Star *
          Mut mut
          Symbol u8
          RParen )
          Arrow ->
          Symbol i32
          Semicolon ;
          Fn fn
          Symbol exit
          LParen (
          Symbol code
          Colon :
          Symbol i32
          RParen )
          Arrow ->
          Unreachable unreachable
          Semicolon ;
          RBrace }
          Fn fn
          Symbol _start
          LParen (
          RParen )
          Arrow ->
          Unreachable unreachable
          LBrace {
          Symbol puts
          LParen (
          StringLiteral "Hello, world!"
          RParen )
          Semicolon ;
          Symbol exit
          LParen (
          NumberLiteral 0
          RParen )
          Semicolon ;
          RBrace }
          EOF AST:
          ------
          Root
          ExternBlock
          FnDecl
          FnProto 'puts'
          ParamDecl 's'
          'mut' PointerType
          Type 'u8'
          Type 'i32'
          FnDecl
          FnProto 'exit'
          ParamDecl 'code'
          Type 'i32'
          Type 'unreachable'
          FnDef
          FnProto '_start'
          Type 'unreachable'
          Block
          FnCallExpression
          FnCall 'puts'
          StringLiteralExpression 'Hello, world!'
          FnCallExpression
          FnCall 'exit'
          NumberLiteralExpression 0
          Semantic Analysis:
          --------------------
          OK
          Code Generation:
          ------------------
          ; ModuleID = 'ZigModule'
          @0 = private unnamed_addr constant [14 x i8] c"Hello, world!\00"
          ; Function Attrs: noreturn
          declare void @exit(i32) #0
          declare i32 @puts(i8*)
          ; Function Attrs: noreturn nounwind
          define void @_start() #1 {
          entry:
          %0 = call i32 @puts(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0)), !dbg !8
          call void @exit(i32 0), !dbg !10
          unreachable, !dbg !10
          }
          attributes #0 = { noreturn }
          attributes #1 = { noreturn nounwind }
          !llvm.dbg.cu = !{!0}
          !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "zig 0.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
          !1 = !DIFile(filename: "hello.zig", directory: "../test")
          !2 = !{}
          !3 = !{!4}
          !4 = !DISubprogram(name: "_start", scope: !1, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: false, function: void ()* @_start, variables: !2)
          !5 = !DISubroutineType(types: !6)
          !6 = !{!7}
          !7 = !DIBasicType(name: "void", encoding: DW_ATE_unsigned)
          !8 = !DILocation(line: 8, column: 5, scope: !9)
          !9 = distinct !DILexicalBlock(scope: !4, file: !1, line: 7, column: 28)
          !10 = !DILocation(line: 9, column: 5, scope: !9)
          Link:
          -------
          OK
          josh@jash:~/dev/zig/build$ ./hello bash: ./hello: No such file or directory
          

          The problem is that ./hello is linked against /lib/ld64.so.1 instead of /lib64/ld-linux-x86-64.so.2. This seems to be due to ld being misconfigured on Debian.

          This patch can work around the issue:

          diff --git a/src/codegen.cpp b/src/codegen.cpp
          index d59eff3..8318a43 100644
          --- a/src/codegen.cpp
          +++ b/src/codegen.cpp
          @@ -721,6 +721,8 @@ void code_gen_link(CodeGen *g, const char *out_file) {
          if (g->is_static) {
          args.append("-static");
          }
          + args.append("-dynamic-linker");
          + args.append("/lib64/ld-linux-x86-64.so.2");
          args.append("-o");
          args.append(out_file);
          args.append((const char *)buf_ptr(&out_file_o));
          

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            No labels
            No labels

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              file not found on Ubuntu #1

              Description

              @thejoshwolfe
              josh@jash:~/dev/zig$ mkdir build
              josh@jash:~/dev/zig$ cd build
              josh@jash:~/dev/zig/build$ cmake ..
              -- The CXX compiler identification is GNU 5.2.1
              -- Check for working CXX compiler: /usr/bin/c++
              -- Check for working CXX compiler: /usr/bin/c++ -- works
              -- Detecting CXX compiler ABI info
              -- Detecting CXX compiler ABI info - done
              -- Detecting CXX compile features
              -- Detecting CXX compile features - done
              Configuring zig version 0.0.0
              -- Found LLVM: -lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMBitWriter -lLLVMIRReader -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMBPFAsmPrinter -lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUUtils -lLLVMAMDGPUDesc -lLLVMAMDGPUInfo -lLLVMAMDGPUAsmPrinter -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMMIRParser -lLLVMAsmParser -lLLVMLibDriver -lLLVMOption -lLLVMDebugInfoPDB -lLLVMTableGen -lLLVMOrcJIT -lLLVMLineEditor -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMDebugInfoDWARF -lLLVMPasses -lLLVMipo -lLLVMVectorize -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMTarget -lLLVMScalarOpts -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMInstCombine -lLLVMInstrumentation -lLLVMTransformUtils -lLLVMipa -lLLVMMC -lLLVMAnalysis -lLLVMCore -lLLVMSupport;-lz -lpthread -lffi -ledit -ltinfo -ldl -lm -- Configuring done
              -- Generating done
              -- Build files have been written to: /home/josh/dev/zig/build
              josh@jash:~/dev/zig/build$ make
              Scanning dependencies of target run_tests
              [ 7%] Building CXX object CMakeFiles/run_tests.dir/src/buffer.cpp.o
              [ 15%] Building CXX object CMakeFiles/run_tests.dir/src/util.cpp.o
              [ 23%] Building CXX object CMakeFiles/run_tests.dir/src/os.cpp.o
              [ 30%] Building CXX object CMakeFiles/run_tests.dir/test/standalone.cpp.o
              Linking CXX executable run_tests
              [ 30%] Built target run_tests
              Scanning dependencies of target zig
              [ 38%] Building CXX object CMakeFiles/zig.dir/src/buffer.cpp.o
              [ 46%] Building CXX object CMakeFiles/zig.dir/src/error.cpp.o
              [ 53%] Building CXX object CMakeFiles/zig.dir/src/main.cpp.o
              [ 61%] Building CXX object CMakeFiles/zig.dir/src/parser.cpp.o
              [ 69%] Building CXX object CMakeFiles/zig.dir/src/tokenizer.cpp.o
              [ 76%] Building CXX object CMakeFiles/zig.dir/src/util.cpp.o
              [ 84%] Building CXX object CMakeFiles/zig.dir/src/codegen.cpp.o
              [ 92%] Building CXX object CMakeFiles/zig.dir/src/zig_llvm.cpp.o
              [100%] Building CXX object CMakeFiles/zig.dir/src/os.cpp.o
              Linking CXX executable zig
              [100%] Built target zig
              josh@jash:~/dev/zig/build$ ./zig build --output hello ../test/hello.zig Original source:
              ----------------
              #link("c")
              extern {
              fn puts(s: *mut u8) -> i32;
              fn exit(code: i32) -> unreachable;
              }
              fn _start() -> unreachable {
              puts("Hello, world!");
              exit(0);
              }
              Tokens:
              ---------
              NumberSign #
              Symbol link
              LParen (
              StringLiteral "c"
              RParen )
              Extern extern
              LBrace {
              Fn fn
              Symbol puts
              LParen (
              Symbol s
              Colon :
              Star *
              Mut mut
              Symbol u8
              RParen )
              Arrow ->
              Symbol i32
              Semicolon ;
              Fn fn
              Symbol exit
              LParen (
              Symbol code
              Colon :
              Symbol i32
              RParen )
              Arrow ->
              Unreachable unreachable
              Semicolon ;
              RBrace }
              Fn fn
              Symbol _start
              LParen (
              RParen )
              Arrow ->
              Unreachable unreachable
              LBrace {
              Symbol puts
              LParen (
              StringLiteral "Hello, world!"
              RParen )
              Semicolon ;
              Symbol exit
              LParen (
              NumberLiteral 0
              RParen )
              Semicolon ;
              RBrace }
              EOF AST:
              ------
              Root
              ExternBlock
              FnDecl
              FnProto 'puts'
              ParamDecl 's'
              'mut' PointerType
              Type 'u8'
              Type 'i32'
              FnDecl
              FnProto 'exit'
              ParamDecl 'code'
              Type 'i32'
              Type 'unreachable'
              FnDef
              FnProto '_start'
              Type 'unreachable'
              Block
              FnCallExpression
              FnCall 'puts'
              StringLiteralExpression 'Hello, world!'
              FnCallExpression
              FnCall 'exit'
              NumberLiteralExpression 0
              Semantic Analysis:
              --------------------
              OK
              Code Generation:
              ------------------
              ; ModuleID = 'ZigModule'
              @0 = private unnamed_addr constant [14 x i8] c"Hello, world!\00"
              ; Function Attrs: noreturn
              declare void @exit(i32) #0
              declare i32 @puts(i8*)
              ; Function Attrs: noreturn nounwind
              define void @_start() #1 {
              entry:
              %0 = call i32 @puts(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0)), !dbg !8
              call void @exit(i32 0), !dbg !10
              unreachable, !dbg !10
              }
              attributes #0 = { noreturn }
              attributes #1 = { noreturn nounwind }
              !llvm.dbg.cu = !{!0}
              !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "zig 0.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
              !1 = !DIFile(filename: "hello.zig", directory: "../test")
              !2 = !{}
              !3 = !{!4}
              !4 = !DISubprogram(name: "_start", scope: !1, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: false, function: void ()* @_start, variables: !2)
              !5 = !DISubroutineType(types: !6)
              !6 = !{!7}
              !7 = !DIBasicType(name: "void", encoding: DW_ATE_unsigned)
              !8 = !DILocation(line: 8, column: 5, scope: !9)
              !9 = distinct !DILexicalBlock(scope: !4, file: !1, line: 7, column: 28)
              !10 = !DILocation(line: 9, column: 5, scope: !9)
              Link:
              -------
              OK
              josh@jash:~/dev/zig/build$ ./hello bash: ./hello: No such file or directory
              

              The problem is that ./hello is linked against /lib/ld64.so.1 instead of /lib64/ld-linux-x86-64.so.2. This seems to be due to ld being misconfigured on Debian.

              This patch can work around the issue:

              diff --git a/src/codegen.cpp b/src/codegen.cpp
              index d59eff3..8318a43 100644
              --- a/src/codegen.cpp
              +++ b/src/codegen.cpp
              @@ -721,6 +721,8 @@ void code_gen_link(CodeGen *g, const char *out_file) {
              if (g->is_static) {
              args.append("-static");
              }
              + args.append("-dynamic-linker");
              + args.append("/lib64/ld-linux-x86-64.so.2");
              args.append("-o");
              args.append(out_file);
              args.append((const char *)buf_ptr(&out_file_o));
              

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                No labels
                No labels

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  file not found on Ubuntu #1

                  Description

                  @thejoshwolfe
                  josh@jash:~/dev/zig$ mkdir build
                  josh@jash:~/dev/zig$ cd build
                  josh@jash:~/dev/zig/build$ cmake ..
                  -- The CXX compiler identification is GNU 5.2.1
                  -- Check for working CXX compiler: /usr/bin/c++
                  -- Check for working CXX compiler: /usr/bin/c++ -- works
                  -- Detecting CXX compiler ABI info
                  -- Detecting CXX compiler ABI info - done
                  -- Detecting CXX compile features
                  -- Detecting CXX compile features - done
                  Configuring zig version 0.0.0
                  -- Found LLVM: -lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMBitWriter -lLLVMIRReader -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMBPFAsmPrinter -lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUUtils -lLLVMAMDGPUDesc -lLLVMAMDGPUInfo -lLLVMAMDGPUAsmPrinter -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMMIRParser -lLLVMAsmParser -lLLVMLibDriver -lLLVMOption -lLLVMDebugInfoPDB -lLLVMTableGen -lLLVMOrcJIT -lLLVMLineEditor -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMDebugInfoDWARF -lLLVMPasses -lLLVMipo -lLLVMVectorize -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMTarget -lLLVMScalarOpts -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMInstCombine -lLLVMInstrumentation -lLLVMTransformUtils -lLLVMipa -lLLVMMC -lLLVMAnalysis -lLLVMCore -lLLVMSupport;-lz -lpthread -lffi -ledit -ltinfo -ldl -lm -- Configuring done
                  -- Generating done
                  -- Build files have been written to: /home/josh/dev/zig/build
                  josh@jash:~/dev/zig/build$ make
                  Scanning dependencies of target run_tests
                  [ 7%] Building CXX object CMakeFiles/run_tests.dir/src/buffer.cpp.o
                  [ 15%] Building CXX object CMakeFiles/run_tests.dir/src/util.cpp.o
                  [ 23%] Building CXX object CMakeFiles/run_tests.dir/src/os.cpp.o
                  [ 30%] Building CXX object CMakeFiles/run_tests.dir/test/standalone.cpp.o
                  Linking CXX executable run_tests
                  [ 30%] Built target run_tests
                  Scanning dependencies of target zig
                  [ 38%] Building CXX object CMakeFiles/zig.dir/src/buffer.cpp.o
                  [ 46%] Building CXX object CMakeFiles/zig.dir/src/error.cpp.o
                  [ 53%] Building CXX object CMakeFiles/zig.dir/src/main.cpp.o
                  [ 61%] Building CXX object CMakeFiles/zig.dir/src/parser.cpp.o
                  [ 69%] Building CXX object CMakeFiles/zig.dir/src/tokenizer.cpp.o
                  [ 76%] Building CXX object CMakeFiles/zig.dir/src/util.cpp.o
                  [ 84%] Building CXX object CMakeFiles/zig.dir/src/codegen.cpp.o
                  [ 92%] Building CXX object CMakeFiles/zig.dir/src/zig_llvm.cpp.o
                  [100%] Building CXX object CMakeFiles/zig.dir/src/os.cpp.o
                  Linking CXX executable zig
                  [100%] Built target zig
                  josh@jash:~/dev/zig/build$ ./zig build --output hello ../test/hello.zig Original source:
                  ----------------
                  #link("c")
                  extern {
                  fn puts(s: *mut u8) -> i32;
                  fn exit(code: i32) -> unreachable;
                  }
                  fn _start() -> unreachable {
                  puts("Hello, world!");
                  exit(0);
                  }
                  Tokens:
                  ---------
                  NumberSign #
                  Symbol link
                  LParen (
                  StringLiteral "c"
                  RParen )
                  Extern extern
                  LBrace {
                  Fn fn
                  Symbol puts
                  LParen (
                  Symbol s
                  Colon :
                  Star *
                  Mut mut
                  Symbol u8
                  RParen )
                  Arrow ->
                  Symbol i32
                  Semicolon ;
                  Fn fn
                  Symbol exit
                  LParen (
                  Symbol code
                  Colon :
                  Symbol i32
                  RParen )
                  Arrow ->
                  Unreachable unreachable
                  Semicolon ;
                  RBrace }
                  Fn fn
                  Symbol _start
                  LParen (
                  RParen )
                  Arrow ->
                  Unreachable unreachable
                  LBrace {
                  Symbol puts
                  LParen (
                  StringLiteral "Hello, world!"
                  RParen )
                  Semicolon ;
                  Symbol exit
                  LParen (
                  NumberLiteral 0
                  RParen )
                  Semicolon ;
                  RBrace }
                  EOF AST:
                  ------
                  Root
                  ExternBlock
                  FnDecl
                  FnProto 'puts'
                  ParamDecl 's'
                  'mut' PointerType
                  Type 'u8'
                  Type 'i32'
                  FnDecl
                  FnProto 'exit'
                  ParamDecl 'code'
                  Type 'i32'
                  Type 'unreachable'
                  FnDef
                  FnProto '_start'
                  Type 'unreachable'
                  Block
                  FnCallExpression
                  FnCall 'puts'
                  StringLiteralExpression 'Hello, world!'
                  FnCallExpression
                  FnCall 'exit'
                  NumberLiteralExpression 0
                  Semantic Analysis:
                  --------------------
                  OK
                  Code Generation:
                  ------------------
                  ; ModuleID = 'ZigModule'
                  @0 = private unnamed_addr constant [14 x i8] c"Hello, world!\00"
                  ; Function Attrs: noreturn
                  declare void @exit(i32) #0
                  declare i32 @puts(i8*)
                  ; Function Attrs: noreturn nounwind
                  define void @_start() #1 {
                  entry:
                  %0 = call i32 @puts(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0)), !dbg !8
                  call void @exit(i32 0), !dbg !10
                  unreachable, !dbg !10
                  }
                  attributes #0 = { noreturn }
                  attributes #1 = { noreturn nounwind }
                  !llvm.dbg.cu = !{!0}
                  !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "zig 0.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
                  !1 = !DIFile(filename: "hello.zig", directory: "../test")
                  !2 = !{}
                  !3 = !{!4}
                  !4 = !DISubprogram(name: "_start", scope: !1, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: false, function: void ()* @_start, variables: !2)
                  !5 = !DISubroutineType(types: !6)
                  !6 = !{!7}
                  !7 = !DIBasicType(name: "void", encoding: DW_ATE_unsigned)
                  !8 = !DILocation(line: 8, column: 5, scope: !9)
                  !9 = distinct !DILexicalBlock(scope: !4, file: !1, line: 7, column: 28)
                  !10 = !DILocation(line: 9, column: 5, scope: !9)
                  Link:
                  -------
                  OK
                  josh@jash:~/dev/zig/build$ ./hello bash: ./hello: No such file or directory
                  

                  The problem is that ./hello is linked against /lib/ld64.so.1 instead of /lib64/ld-linux-x86-64.so.2. This seems to be due to ld being misconfigured on Debian.

                  This patch can work around the issue:

                  diff --git a/src/codegen.cpp b/src/codegen.cpp
                  index d59eff3..8318a43 100644
                  --- a/src/codegen.cpp
                  +++ b/src/codegen.cpp
                  @@ -721,6 +721,8 @@ void code_gen_link(CodeGen *g, const char *out_file) {
                  if (g->is_static) {
                  args.append("-static");
                  }
                  + args.append("-dynamic-linker");
                  + args.append("/lib64/ld-linux-x86-64.so.2");
                  args.append("-o");
                  args.append(out_file);
                  args.append((const char *)buf_ptr(&out_file_o));
                  

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    No labels
                    No labels

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      file not found on Ubuntu #1

                      Description

                      @thejoshwolfe
                      josh@jash:~/dev/zig$ mkdir build
                      josh@jash:~/dev/zig$ cd build
                      josh@jash:~/dev/zig/build$ cmake ..
                      -- The CXX compiler identification is GNU 5.2.1
                      -- Check for working CXX compiler: /usr/bin/c++
                      -- Check for working CXX compiler: /usr/bin/c++ -- works
                      -- Detecting CXX compiler ABI info
                      -- Detecting CXX compiler ABI info - done
                      -- Detecting CXX compile features
                      -- Detecting CXX compile features - done
                      Configuring zig version 0.0.0
                      -- Found LLVM: -lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMBitWriter -lLLVMIRReader -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMBPFAsmPrinter -lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUUtils -lLLVMAMDGPUDesc -lLLVMAMDGPUInfo -lLLVMAMDGPUAsmPrinter -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMMIRParser -lLLVMAsmParser -lLLVMLibDriver -lLLVMOption -lLLVMDebugInfoPDB -lLLVMTableGen -lLLVMOrcJIT -lLLVMLineEditor -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMDebugInfoDWARF -lLLVMPasses -lLLVMipo -lLLVMVectorize -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMTarget -lLLVMScalarOpts -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMInstCombine -lLLVMInstrumentation -lLLVMTransformUtils -lLLVMipa -lLLVMMC -lLLVMAnalysis -lLLVMCore -lLLVMSupport;-lz -lpthread -lffi -ledit -ltinfo -ldl -lm -- Configuring done
                      -- Generating done
                      -- Build files have been written to: /home/josh/dev/zig/build
                      josh@jash:~/dev/zig/build$ make
                      Scanning dependencies of target run_tests
                      [ 7%] Building CXX object CMakeFiles/run_tests.dir/src/buffer.cpp.o
                      [ 15%] Building CXX object CMakeFiles/run_tests.dir/src/util.cpp.o
                      [ 23%] Building CXX object CMakeFiles/run_tests.dir/src/os.cpp.o
                      [ 30%] Building CXX object CMakeFiles/run_tests.dir/test/standalone.cpp.o
                      Linking CXX executable run_tests
                      [ 30%] Built target run_tests
                      Scanning dependencies of target zig
                      [ 38%] Building CXX object CMakeFiles/zig.dir/src/buffer.cpp.o
                      [ 46%] Building CXX object CMakeFiles/zig.dir/src/error.cpp.o
                      [ 53%] Building CXX object CMakeFiles/zig.dir/src/main.cpp.o
                      [ 61%] Building CXX object CMakeFiles/zig.dir/src/parser.cpp.o
                      [ 69%] Building CXX object CMakeFiles/zig.dir/src/tokenizer.cpp.o
                      [ 76%] Building CXX object CMakeFiles/zig.dir/src/util.cpp.o
                      [ 84%] Building CXX object CMakeFiles/zig.dir/src/codegen.cpp.o
                      [ 92%] Building CXX object CMakeFiles/zig.dir/src/zig_llvm.cpp.o
                      [100%] Building CXX object CMakeFiles/zig.dir/src/os.cpp.o
                      Linking CXX executable zig
                      [100%] Built target zig
                      josh@jash:~/dev/zig/build$ ./zig build --output hello ../test/hello.zig Original source:
                      ----------------
                      #link("c")
                      extern {
                      fn puts(s: *mut u8) -> i32;
                      fn exit(code: i32) -> unreachable;
                      }
                      fn _start() -> unreachable {
                      puts("Hello, world!");
                      exit(0);
                      }
                      Tokens:
                      ---------
                      NumberSign #
                      Symbol link
                      LParen (
                      StringLiteral "c"
                      RParen )
                      Extern extern
                      LBrace {
                      Fn fn
                      Symbol puts
                      LParen (
                      Symbol s
                      Colon :
                      Star *
                      Mut mut
                      Symbol u8
                      RParen )
                      Arrow ->
                      Symbol i32
                      Semicolon ;
                      Fn fn
                      Symbol exit
                      LParen (
                      Symbol code
                      Colon :
                      Symbol i32
                      RParen )
                      Arrow ->
                      Unreachable unreachable
                      Semicolon ;
                      RBrace }
                      Fn fn
                      Symbol _start
                      LParen (
                      RParen )
                      Arrow ->
                      Unreachable unreachable
                      LBrace {
                      Symbol puts
                      LParen (
                      StringLiteral "Hello, world!"
                      RParen )
                      Semicolon ;
                      Symbol exit
                      LParen (
                      NumberLiteral 0
                      RParen )
                      Semicolon ;
                      RBrace }
                      EOF AST:
                      ------
                      Root
                      ExternBlock
                      FnDecl
                      FnProto 'puts'
                      ParamDecl 's'
                      'mut' PointerType
                      Type 'u8'
                      Type 'i32'
                      FnDecl
                      FnProto 'exit'
                      ParamDecl 'code'
                      Type 'i32'
                      Type 'unreachable'
                      FnDef
                      FnProto '_start'
                      Type 'unreachable'
                      Block
                      FnCallExpression
                      FnCall 'puts'
                      StringLiteralExpression 'Hello, world!'
                      FnCallExpression
                      FnCall 'exit'
                      NumberLiteralExpression 0
                      Semantic Analysis:
                      --------------------
                      OK
                      Code Generation:
                      ------------------
                      ; ModuleID = 'ZigModule'
                      @0 = private unnamed_addr constant [14 x i8] c"Hello, world!\00"
                      ; Function Attrs: noreturn
                      declare void @exit(i32) #0
                      declare i32 @puts(i8*)
                      ; Function Attrs: noreturn nounwind
                      define void @_start() #1 {
                      entry:
                      %0 = call i32 @puts(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0)), !dbg !8
                      call void @exit(i32 0), !dbg !10
                      unreachable, !dbg !10
                      }
                      attributes #0 = { noreturn }
                      attributes #1 = { noreturn nounwind }
                      !llvm.dbg.cu = !{!0}
                      !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "zig 0.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
                      !1 = !DIFile(filename: "hello.zig", directory: "../test")
                      !2 = !{}
                      !3 = !{!4}
                      !4 = !DISubprogram(name: "_start", scope: !1, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: false, function: void ()* @_start, variables: !2)
                      !5 = !DISubroutineType(types: !6)
                      !6 = !{!7}
                      !7 = !DIBasicType(name: "void", encoding: DW_ATE_unsigned)
                      !8 = !DILocation(line: 8, column: 5, scope: !9)
                      !9 = distinct !DILexicalBlock(scope: !4, file: !1, line: 7, column: 28)
                      !10 = !DILocation(line: 9, column: 5, scope: !9)
                      Link:
                      -------
                      OK
                      josh@jash:~/dev/zig/build$ ./hello bash: ./hello: No such file or directory
                      

                      The problem is that ./hello is linked against /lib/ld64.so.1 instead of /lib64/ld-linux-x86-64.so.2. This seems to be due to ld being misconfigured on Debian.

                      This patch can work around the issue:

                      diff --git a/src/codegen.cpp b/src/codegen.cpp
                      index d59eff3..8318a43 100644
                      --- a/src/codegen.cpp
                      +++ b/src/codegen.cpp
                      @@ -721,6 +721,8 @@ void code_gen_link(CodeGen *g, const char *out_file) {
                      if (g->is_static) {
                      args.append("-static");
                      }
                      + args.append("-dynamic-linker");
                      + args.append("/lib64/ld-linux-x86-64.so.2");
                      args.append("-o");
                      args.append(out_file);
                      args.append((const char *)buf_ptr(&out_file_o));
                      

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        No labels
                        No labels

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          file not found on Ubuntu #1

                          Description

                          @thejoshwolfe
                          josh@jash:~/dev/zig$ mkdir build
                          josh@jash:~/dev/zig$ cd build
                          josh@jash:~/dev/zig/build$ cmake ..
                          -- The CXX compiler identification is GNU 5.2.1
                          -- Check for working CXX compiler: /usr/bin/c++
                          -- Check for working CXX compiler: /usr/bin/c++ -- works
                          -- Detecting CXX compiler ABI info
                          -- Detecting CXX compiler ABI info - done
                          -- Detecting CXX compile features
                          -- Detecting CXX compile features - done
                          Configuring zig version 0.0.0
                          -- Found LLVM: -lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMBitWriter -lLLVMIRReader -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMBPFAsmPrinter -lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUUtils -lLLVMAMDGPUDesc -lLLVMAMDGPUInfo -lLLVMAMDGPUAsmPrinter -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMMIRParser -lLLVMAsmParser -lLLVMLibDriver -lLLVMOption -lLLVMDebugInfoPDB -lLLVMTableGen -lLLVMOrcJIT -lLLVMLineEditor -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMDebugInfoDWARF -lLLVMPasses -lLLVMipo -lLLVMVectorize -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMTarget -lLLVMScalarOpts -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMInstCombine -lLLVMInstrumentation -lLLVMTransformUtils -lLLVMipa -lLLVMMC -lLLVMAnalysis -lLLVMCore -lLLVMSupport;-lz -lpthread -lffi -ledit -ltinfo -ldl -lm -- Configuring done
                          -- Generating done
                          -- Build files have been written to: /home/josh/dev/zig/build
                          josh@jash:~/dev/zig/build$ make
                          Scanning dependencies of target run_tests
                          [ 7%] Building CXX object CMakeFiles/run_tests.dir/src/buffer.cpp.o
                          [ 15%] Building CXX object CMakeFiles/run_tests.dir/src/util.cpp.o
                          [ 23%] Building CXX object CMakeFiles/run_tests.dir/src/os.cpp.o
                          [ 30%] Building CXX object CMakeFiles/run_tests.dir/test/standalone.cpp.o
                          Linking CXX executable run_tests
                          [ 30%] Built target run_tests
                          Scanning dependencies of target zig
                          [ 38%] Building CXX object CMakeFiles/zig.dir/src/buffer.cpp.o
                          [ 46%] Building CXX object CMakeFiles/zig.dir/src/error.cpp.o
                          [ 53%] Building CXX object CMakeFiles/zig.dir/src/main.cpp.o
                          [ 61%] Building CXX object CMakeFiles/zig.dir/src/parser.cpp.o
                          [ 69%] Building CXX object CMakeFiles/zig.dir/src/tokenizer.cpp.o
                          [ 76%] Building CXX object CMakeFiles/zig.dir/src/util.cpp.o
                          [ 84%] Building CXX object CMakeFiles/zig.dir/src/codegen.cpp.o
                          [ 92%] Building CXX object CMakeFiles/zig.dir/src/zig_llvm.cpp.o
                          [100%] Building CXX object CMakeFiles/zig.dir/src/os.cpp.o
                          Linking CXX executable zig
                          [100%] Built target zig
                          josh@jash:~/dev/zig/build$ ./zig build --output hello ../test/hello.zig Original source:
                          ----------------
                          #link("c")
                          extern {
                          fn puts(s: *mut u8) -> i32;
                          fn exit(code: i32) -> unreachable;
                          }
                          fn _start() -> unreachable {
                          puts("Hello, world!");
                          exit(0);
                          }
                          Tokens:
                          ---------
                          NumberSign #
                          Symbol link
                          LParen (
                          StringLiteral "c"
                          RParen )
                          Extern extern
                          LBrace {
                          Fn fn
                          Symbol puts
                          LParen (
                          Symbol s
                          Colon :
                          Star *
                          Mut mut
                          Symbol u8
                          RParen )
                          Arrow ->
                          Symbol i32
                          Semicolon ;
                          Fn fn
                          Symbol exit
                          LParen (
                          Symbol code
                          Colon :
                          Symbol i32
                          RParen )
                          Arrow ->
                          Unreachable unreachable
                          Semicolon ;
                          RBrace }
                          Fn fn
                          Symbol _start
                          LParen (
                          RParen )
                          Arrow ->
                          Unreachable unreachable
                          LBrace {
                          Symbol puts
                          LParen (
                          StringLiteral "Hello, world!"
                          RParen )
                          Semicolon ;
                          Symbol exit
                          LParen (
                          NumberLiteral 0
                          RParen )
                          Semicolon ;
                          RBrace }
                          EOF AST:
                          ------
                          Root
                          ExternBlock
                          FnDecl
                          FnProto 'puts'
                          ParamDecl 's'
                          'mut' PointerType
                          Type 'u8'
                          Type 'i32'
                          FnDecl
                          FnProto 'exit'
                          ParamDecl 'code'
                          Type 'i32'
                          Type 'unreachable'
                          FnDef
                          FnProto '_start'
                          Type 'unreachable'
                          Block
                          FnCallExpression
                          FnCall 'puts'
                          StringLiteralExpression 'Hello, world!'
                          FnCallExpression
                          FnCall 'exit'
                          NumberLiteralExpression 0
                          Semantic Analysis:
                          --------------------
                          OK
                          Code Generation:
                          ------------------
                          ; ModuleID = 'ZigModule'
                          @0 = private unnamed_addr constant [14 x i8] c"Hello, world!\00"
                          ; Function Attrs: noreturn
                          declare void @exit(i32) #0
                          declare i32 @puts(i8*)
                          ; Function Attrs: noreturn nounwind
                          define void @_start() #1 {
                          entry:
                          %0 = call i32 @puts(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0)), !dbg !8
                          call void @exit(i32 0), !dbg !10
                          unreachable, !dbg !10
                          }
                          attributes #0 = { noreturn }
                          attributes #1 = { noreturn nounwind }
                          !llvm.dbg.cu = !{!0}
                          !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "zig 0.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
                          !1 = !DIFile(filename: "hello.zig", directory: "../test")
                          !2 = !{}
                          !3 = !{!4}
                          !4 = !DISubprogram(name: "_start", scope: !1, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: false, function: void ()* @_start, variables: !2)
                          !5 = !DISubroutineType(types: !6)
                          !6 = !{!7}
                          !7 = !DIBasicType(name: "void", encoding: DW_ATE_unsigned)
                          !8 = !DILocation(line: 8, column: 5, scope: !9)
                          !9 = distinct !DILexicalBlock(scope: !4, file: !1, line: 7, column: 28)
                          !10 = !DILocation(line: 9, column: 5, scope: !9)
                          Link:
                          -------
                          OK
                          josh@jash:~/dev/zig/build$ ./hello bash: ./hello: No such file or directory
                          

                          The problem is that ./hello is linked against /lib/ld64.so.1 instead of /lib64/ld-linux-x86-64.so.2. This seems to be due to ld being misconfigured on Debian.

                          This patch can work around the issue:

                          diff --git a/src/codegen.cpp b/src/codegen.cpp
                          index d59eff3..8318a43 100644
                          --- a/src/codegen.cpp
                          +++ b/src/codegen.cpp
                          @@ -721,6 +721,8 @@ void code_gen_link(CodeGen *g, const char *out_file) {
                          if (g->is_static) {
                          args.append("-static");
                          }
                          + args.append("-dynamic-linker");
                          + args.append("/lib64/ld-linux-x86-64.so.2");
                          args.append("-o");
                          args.append(out_file);
                          args.append((const char *)buf_ptr(&out_file_o));
                          

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            No labels
                            No labels

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              file not found on Ubuntu #1

                              Description

                              @thejoshwolfe
                              josh@jash:~/dev/zig$ mkdir build
                              josh@jash:~/dev/zig$ cd build
                              josh@jash:~/dev/zig/build$ cmake ..
                              -- The CXX compiler identification is GNU 5.2.1
                              -- Check for working CXX compiler: /usr/bin/c++
                              -- Check for working CXX compiler: /usr/bin/c++ -- works
                              -- Detecting CXX compiler ABI info
                              -- Detecting CXX compiler ABI info - done
                              -- Detecting CXX compile features
                              -- Detecting CXX compile features - done
                              Configuring zig version 0.0.0
                              -- Found LLVM: -lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMBitWriter -lLLVMIRReader -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMBPFAsmPrinter -lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUUtils -lLLVMAMDGPUDesc -lLLVMAMDGPUInfo -lLLVMAMDGPUAsmPrinter -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMMIRParser -lLLVMAsmParser -lLLVMLibDriver -lLLVMOption -lLLVMDebugInfoPDB -lLLVMTableGen -lLLVMOrcJIT -lLLVMLineEditor -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMDebugInfoDWARF -lLLVMPasses -lLLVMipo -lLLVMVectorize -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMTarget -lLLVMScalarOpts -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMInstCombine -lLLVMInstrumentation -lLLVMTransformUtils -lLLVMipa -lLLVMMC -lLLVMAnalysis -lLLVMCore -lLLVMSupport;-lz -lpthread -lffi -ledit -ltinfo -ldl -lm -- Configuring done
                              -- Generating done
                              -- Build files have been written to: /home/josh/dev/zig/build
                              josh@jash:~/dev/zig/build$ make
                              Scanning dependencies of target run_tests
                              [ 7%] Building CXX object CMakeFiles/run_tests.dir/src/buffer.cpp.o
                              [ 15%] Building CXX object CMakeFiles/run_tests.dir/src/util.cpp.o
                              [ 23%] Building CXX object CMakeFiles/run_tests.dir/src/os.cpp.o
                              [ 30%] Building CXX object CMakeFiles/run_tests.dir/test/standalone.cpp.o
                              Linking CXX executable run_tests
                              [ 30%] Built target run_tests
                              Scanning dependencies of target zig
                              [ 38%] Building CXX object CMakeFiles/zig.dir/src/buffer.cpp.o
                              [ 46%] Building CXX object CMakeFiles/zig.dir/src/error.cpp.o
                              [ 53%] Building CXX object CMakeFiles/zig.dir/src/main.cpp.o
                              [ 61%] Building CXX object CMakeFiles/zig.dir/src/parser.cpp.o
                              [ 69%] Building CXX object CMakeFiles/zig.dir/src/tokenizer.cpp.o
                              [ 76%] Building CXX object CMakeFiles/zig.dir/src/util.cpp.o
                              [ 84%] Building CXX object CMakeFiles/zig.dir/src/codegen.cpp.o
                              [ 92%] Building CXX object CMakeFiles/zig.dir/src/zig_llvm.cpp.o
                              [100%] Building CXX object CMakeFiles/zig.dir/src/os.cpp.o
                              Linking CXX executable zig
                              [100%] Built target zig
                              josh@jash:~/dev/zig/build$ ./zig build --output hello ../test/hello.zig Original source:
                              ----------------
                              #link("c")
                              extern {
                              fn puts(s: *mut u8) -> i32;
                              fn exit(code: i32) -> unreachable;
                              }
                              fn _start() -> unreachable {
                              puts("Hello, world!");
                              exit(0);
                              }
                              Tokens:
                              ---------
                              NumberSign #
                              Symbol link
                              LParen (
                              StringLiteral "c"
                              RParen )
                              Extern extern
                              LBrace {
                              Fn fn
                              Symbol puts
                              LParen (
                              Symbol s
                              Colon :
                              Star *
                              Mut mut
                              Symbol u8
                              RParen )
                              Arrow ->
                              Symbol i32
                              Semicolon ;
                              Fn fn
                              Symbol exit
                              LParen (
                              Symbol code
                              Colon :
                              Symbol i32
                              RParen )
                              Arrow ->
                              Unreachable unreachable
                              Semicolon ;
                              RBrace }
                              Fn fn
                              Symbol _start
                              LParen (
                              RParen )
                              Arrow ->
                              Unreachable unreachable
                              LBrace {
                              Symbol puts
                              LParen (
                              StringLiteral "Hello, world!"
                              RParen )
                              Semicolon ;
                              Symbol exit
                              LParen (
                              NumberLiteral 0
                              RParen )
                              Semicolon ;
                              RBrace }
                              EOF AST:
                              ------
                              Root
                              ExternBlock
                              FnDecl
                              FnProto 'puts'
                              ParamDecl 's'
                              'mut' PointerType
                              Type 'u8'
                              Type 'i32'
                              FnDecl
                              FnProto 'exit'
                              ParamDecl 'code'
                              Type 'i32'
                              Type 'unreachable'
                              FnDef
                              FnProto '_start'
                              Type 'unreachable'
                              Block
                              FnCallExpression
                              FnCall 'puts'
                              StringLiteralExpression 'Hello, world!'
                              FnCallExpression
                              FnCall 'exit'
                              NumberLiteralExpression 0
                              Semantic Analysis:
                              --------------------
                              OK
                              Code Generation:
                              ------------------
                              ; ModuleID = 'ZigModule'
                              @0 = private unnamed_addr constant [14 x i8] c"Hello, world!\00"
                              ; Function Attrs: noreturn
                              declare void @exit(i32) #0
                              declare i32 @puts(i8*)
                              ; Function Attrs: noreturn nounwind
                              define void @_start() #1 {
                              entry:
                              %0 = call i32 @puts(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0)), !dbg !8
                              call void @exit(i32 0), !dbg !10
                              unreachable, !dbg !10
                              }
                              attributes #0 = { noreturn }
                              attributes #1 = { noreturn nounwind }
                              !llvm.dbg.cu = !{!0}
                              !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "zig 0.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
                              !1 = !DIFile(filename: "hello.zig", directory: "../test")
                              !2 = !{}
                              !3 = !{!4}
                              !4 = !DISubprogram(name: "_start", scope: !1, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: false, function: void ()* @_start, variables: !2)
                              !5 = !DISubroutineType(types: !6)
                              !6 = !{!7}
                              !7 = !DIBasicType(name: "void", encoding: DW_ATE_unsigned)
                              !8 = !DILocation(line: 8, column: 5, scope: !9)
                              !9 = distinct !DILexicalBlock(scope: !4, file: !1, line: 7, column: 28)
                              !10 = !DILocation(line: 9, column: 5, scope: !9)
                              Link:
                              -------
                              OK
                              josh@jash:~/dev/zig/build$ ./hello bash: ./hello: No such file or directory
                              

                              The problem is that ./hello is linked against /lib/ld64.so.1 instead of /lib64/ld-linux-x86-64.so.2. This seems to be due to ld being misconfigured on Debian.

                              This patch can work around the issue:

                              diff --git a/src/codegen.cpp b/src/codegen.cpp
                              index d59eff3..8318a43 100644
                              --- a/src/codegen.cpp
                              +++ b/src/codegen.cpp
                              @@ -721,6 +721,8 @@ void code_gen_link(CodeGen *g, const char *out_file) {
                              if (g->is_static) {
                              args.append("-static");
                              }
                              + args.append("-dynamic-linker");
                              + args.append("/lib64/ld-linux-x86-64.so.2");
                              args.append("-o");
                              args.append(out_file);
                              args.append((const char *)buf_ptr(&out_file_o));
                              

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                No labels
                                No labels

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions