1

我正在研究一个修改用户程序控制流的项目。我为此使用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++ --版本

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

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

任何有关如何继续或解决问题的解决方案的帮助表示赞赏。

特别是可能导致(在这种情况下)

  1. 对 __cxx_global_var_init 的未定义引用
  2. 以 a 为键的全局构造函数
4

0 回答 0