【问题标题】:C++ clang linker problemC++ clang 链接器问题
【发布时间】:2011-08-09 11:29:14
【问题描述】:

我想做C++代码的调试信息分析。 据我了解,clang 应该能够处理 C++。

我试过 clang myFile.cpp 但我明白了

clang:错误:无法执行命令:程序不可执行 clang 错误:链接器命令因信号 1 而失败(使用 -v 查看调用)。

更新: 在为 llvm-ld 设置路径后,它部分工作。我的意思是如果我执行
clang C:myFile.cpp -S -emit-llvm -o - 它输出一些信息。但它仍然失败 clang myFile.cpp 有错误


clang version 2.9 (tags/RELEASE_29/final)
Target: i686-pc-win32
Thread model: posix
 "C:/FrontEnd/llvm/bin/Debug/clang.exe" -cc1 -triple i686-pc-win32 -emit-obj -mrelax-all -disable-free -main-file-name BinarySearch_Kernels.cpp -mrelocation-model static -mdisable-fp-elim -masm-verbose -mconstructor-aliases -momit-leaf-frame-pointer -v -resource-dir C:/FrontEnd/l
lvm/bin/Debug..\lib\clang\2.9 -ferror-limit 19 -fmessage-length 280 -fcxx-exceptions -fexceptions -fms-extensions -fmsc-version=1300 -fgnu-runtime -fdiagnostics-show-option -fcolor-diagnostics -o C:/Users/ilipov/AppData/Local/Temp/cc-563130.o -x c++ C:\clang\BinarySearch_Kernels
.cpp
clang -cc1 version 2.9 based upon llvm 2.9 hosted on i686-pc-win32
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/usr/include"
  #include "..." search starts here:
  #include <...> search starts here:
 C:/FrontEnd/llvm/bin/Debug/../lib/clang/2.9/include
 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include
 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include
End of search list.
 "link.exe" -out:a.out -defaultlib:libcmt -nologo C:/Users/ilipov/AppData/Local/Temp/cc-563130.o
clang: error: unable to execute command: program not executable
clang: error: linker command failed due to signal 1 (use -v to see invocation)

我想要做的任何事情都是尽可能完整的调试信息

例如对于


class stamBase { public: int get1(){return 2;}; int get0(){return 0;} }; class stamDer : public stamBase { public: int get1(){return 1;} }; void func() { stamDer d; int x = d.get1(); }

我明白了



target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:128:128-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32" target triple = "i686-pc-win32" %class.stamDer = type { i8 } define void @_Z4funcv() { entry: %d = alloca %class.stamDer, align 1 %x = alloca i32, align 4 %call = call i32 @_ZN7stamDer4get1Ev(%class.stamDer* %d) store i32 %call, i32* %x, align 4 ret void } define linkonce_odr i32 @_ZN7stamDer4get1Ev(%class.stamDer* %this) nounwind align 2 { entry: %this.addr = alloca %class.stamDer*, align 4 store %class.stamDer* %this, %class.stamDer** %this.addr, align 4 %this1 = load %class.stamDer** %this.addr ret i32 1 }

根据我对 clang 调试信息代码的调查,我认为我也应该获取 stamBase 的信息! 我如何正确运行 clang 以接受完整的调试信息并防止 clang 错误

【问题讨论】:

标签: c++ linker-errors llvm clang


【解决方案1】:

我认为您需要安装链接器。 GNU ld 会好的;你应该可以通过你的包管理器安装它。

编辑:还有一个LLVM linker,不太受欢迎,但是一旦安装了clang,它就会开箱即用(只需将其添加到PATH,然后重新运行@987654324 @.)

【讨论】:

  • 我将 clang 与 llvm 一起使用 - 链接器还有其他选项吗?
  • @Yakov:无论是 ld 还是 gold,都应该可以。 ld 具有标准和跨平台的优势。
  • 假设我安装了 llvm-ld 或 GNU-ld 任一-ld。我现在应该如何使用我的 cpp 文件运行 clang?
  • 我有 llvm-ld exe。它已添加到路径中。但我仍然遇到同样的错误。
  • @Yakov:您应该使用-v 运行它以了解有关您的错误的更多详细信息,并在此处发布相关信息。
猜你喜欢
  • 2011-05-08
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 2016-10-24
相关资源
最近更新 更多