मुख्य कंटेंट तक स्किप करें

लिंक sysroot मैन्युअल नियंत्रण (-C link-sysroot)

यह दस्तावेज़ wavec में लिंक चरण sysroot को स्पष्ट रूप से नियंत्रित करने के तरीके का वर्णन करता है।

मुख्य सिद्धांत:

  • --sysroot=<path>: संकलन चरण (clang -c) sysroot
  • -C link-sysroot=<path>: लिंक चरण (linker) sysroot

अर्थात्, संकलन और लिंक के sysroot को अलग से संभालें।


1. यह क्यों आवश्यक है

क्रॉस लिंक में -C linker=<path> का उपयोग करने पर, अक्सर लिंक ड्राइवर (जैसे: aarch64-linux-gnu-gcc) द्वारा संदर्भित रनटाइम पथ (crt1.o, libc, libm) को अलग से निर्दिष्ट करना होता है।

इस समय लिंक sysroot को स्वचालित रूप से अनुमानित नहीं करके, CLI में स्पष्ट रूप से पारित करने के लिए डिज़ाइन किया गया है।


2. विकल्प परिभाषा

लिंक चरण में --sysroot=<path> को प्रवेश कराएं।

wavec -C link-sysroot=/path/to/sysroot ...

आंतरिक रूप में, इसका मतलब -C link-arg=--sysroot=<path> होता है।

मौजूदा रॉ लिंक तर्क विधि को भी जारी रखते हैं।

wavec -C link-arg=--sysroot=/path/to/sysroot ...

3. सत्यापन नियम

यदि आवश्यक लिंक चरण वाली निर्माण में निम्नलिखित शर्तों का एक साथ पालन होता है, तो उपयोग त्रुटि के कारण समाप्त कर दें।

  1. -C linker=... का उपयोग
  2. --sysroot=<path> का उपयोग
  3. लिंक sysroot (-C link-sysroot या -C link-arg=--sysroot=...) निर्दिष्ट नहीं

त्रुटि संदेश उदाहरण:

when using -C linker=..., --sysroot=<path> is compile-stage only; pass linker sysroot explicitly with -C link-sysroot=<path> (or -C link-arg=--sysroot=<path>)

4. उपयोग का उदाहरण

4.1 AArch64 Linux क्रॉस लिंक

wavec \
-C linker=aarch64-linux-gnu-gcc \
--sysroot=/usr/aarch64-redhat-linux/sys-root/fc43 \
-C link-sysroot=/usr/aarch64-redhat-linux/sys-root/fc43 \
build test/test93.wave \
--target aarch64-unknown-linux-gnu \
--emit=bin \
-o /tmp/test93-aarch64.bin

4.2 रॉ लिंक तर्क विधि

wavec \
-C linker=aarch64-linux-gnu-gcc \
--sysroot=/usr/aarch64-redhat-linux/sys-root/fc43 \
-C link-arg=--sysroot=/usr/aarch64-redhat-linux/sys-root/fc43 \
build test/test93.wave \
--target aarch64-unknown-linux-gnu \
--emit=bin

4.3 बिना लिंक के निर्माण (--emit=obj)

यदि लिंक चरण नहीं है, तो लिंक sysroot की आवश्यकता नहीं होती।

wavec --sysroot=/path/to/sysroot build main.wave --emit=obj

5. सारांश

  • --sysroot संकलन चरण नियंत्रण है
  • -C link-sysroot लिंक चरण नियंत्रण है
  • स्वचालित विवरण की तुलना में स्पष्ट नियंत्रण को प्राथमिकता दें