मैंने हाल ही में नवीनतम llvm और clang trunk संस्करणों को आजमाया। उन्होंने बॉक्स के बाहर एक चेतावनी के बिना संकलित किया लेकिन मुझे एक हैलो वर्ल्ड उदाहरण को जोड़ने में परेशानी हो रही है। मेरे कोडक्लैंग लिंकर समस्या
#include <stdio.h>
int main(){
printf("hello\n");
}
मैं का उपयोग कर संकलन
clang test.c
मैं -v का प्रयोग निम्न त्रुटि
/usr/bin/ld: crt1.o: No such file: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
मिल पता चलता है कि gnu ld
"/usr/bin/ld" --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o a.out crt1.o crti.o crtbegin.o -L -L/../../.. /tmp/cc-0XJTsG.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o crtn.o
के रूप में लागू किया जाता है
लेकिन मेरे पास crt1.o ऑब्जेक्ट फ़ाइल है!
$ locate crt1.o
/usr/lib/Mcrt1.o
/usr/lib/Scrt1.o
/usr/lib/crt1.o
/usr/lib/gcrt1.o
क्या भी काम करता है
clang -c test.c
gcc test.o
और पाठ्यक्रम
gcc test.c
की है क्या मैं आगे की कोशिश की:
$ clang -Xlinker "-L /usr/lib" test.c
/usr/bin/ld: crt1.o: No such file: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$ clang -Xlinker "-L /usr/lib" test.c -v
"/usr/bin/ld" --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o a.out crt1.o crti.o crtbegin.o -L -L/../../.. -L /usr/lib /tmp/cc-YsI9ES.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o
मैं भी में crt1.o फ़ाइल कॉपी करने की कोशिश की वर्तमान निर्देशिका। यह काम करने लग रहा था। वैसे यह संकलित नहीं हुआ क्योंकि उस crti.o के बाद गायब था।
मेरा डिस्ट्रो उबंटू है।
अच्छी तरह से मुझे वास्तव में पता नहीं है कि आगे क्या प्रयास करना है। मैं नहीं देखता कि मैं क्लैंग को कैसे ठीक कर सकता हूं और न ही मुझे यह पता है कि एलडी आमंत्रण में आवश्यक पथ को कैसे इंजेक्ट करना है। कोई विचार? llvm›tools›clang›lib›Driver›Tools.cpp
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crt1.o")));
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crti.o")));
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtbegin.o")));
और:
मैं सिर्फ अपने बजना के पृष्ठ में -Xlinker का एक संक्षिप्त विवरण है, लेकिन माना जाता -Xlinker नहीं है तर्क के साथ विकल्प के लिए दो बार पारित किया? जीसीसी के मैन पेज -Xlinker के लिए यही कहते हैं। – anddam