使用clang ++和g ++编译时出现c ++错误

时间:2013-05-24 15:55:42

标签: c++ g++ llvm llvm-clang clang++

我正在开发一个修改用户程序控制流程的项目。我正在使用llvm。最后,我使用clang ++生成一组.s文件。然后我用g ++将它们全部合并。我不能使用clang ++(而不是g ++),因为它在这个阶段给出了很多错误(这不是当前的问题)

对于c程序(gcc和clang),事情是完美的。但对于c ++用户代码(g ++,clang ++),执行

时出现以下错误

g++ -O3 -rdynamic *.s -o main.exe -Wa,-Iressource -lstdc++ -lm -ldl

/tmp/ccUdIbL3.o:(.ctors+0x0): undefined reference to `global constructors keyed to a'
/tmp/cch9k7on.o: In function `global constructors keyed to a':
_GLOBAL__I_a.optin:(.text.startup+0x1): undefined reference to `__cxx_global_var_init'
/tmp/ccvYrG8J.o:(.ctors+0x0): undefined reference to `global constructors keyed to a'
/tmp/cccPFs4G.o:(.ctors+0x0): undefined reference to `global constructors keyed to a'

根据我在互联网上的搜索,对于大多数人来说,这个错误发生是因为他们使用了clang(而不是clang ++)。

  clang --version   clang 3.1版(branches / release_31)

     

目标:x86_64-unknown-linux-gnu

     

线程模型:posix

克++

  

g ++ --version

     

g ++(Ubuntu / Linaro 4.7.3-1ubuntu1)4.7.3

我不知道实际问题在哪里。但我知道如果我只是使用clang ++来生成* .s文件然后使用g ++(没有我的llvm传递)它可以正常工作。因为它不会抱怨直到结束然后g ++,我不知道实际错误发生在哪里。正如我之前所说,如果原始代码是“C”(通过使用clang和gcc),它可以正常工作。

对于如何处理或解决问题的解决方案的任何帮助表示赞赏。

特别可能导致(在此上下文中)

  1. 对__cxx_global_var_init
  2. 的未定义引用
  3. 全局构造函数键入

0 个答案:

没有答案