我正在尝试使用 CLang 使用以下命令行编译和链接一些 C++ 代码:
clang.exe -nostdinc -MD -fno-use-cxa-atexit -fno-rtti -fno-exceptions -fsigned-char -fno-stack-protector -fPIC -m64 -Wall -Werror -Wno-unused-function -Wno-unused-label -Wno-ignored-attributes
(我省略了输出、包含、定义等。这些都很好)
我遇到的问题是,在链接过程中,我得到了错误
error: L0039: reference to undefined symbol `atexit'
我已经在这个问题上花费了相当长的时间,但我一生似乎无法弄清楚如何正确解决这个问题。
到目前为止,我的研究表明atexit是在stdlib.h中定义的,但是在这种情况下我不能使用标准库(这也不是我的决定,对于这个特定的项目来说是完全强制性的)。
据我所知,这个问题现在才出现,因为我们现在突然在我们的代码中有静态对象,这些对象是以这种方式编译的,这导致编译器尝试注册要为这些对象执行的 con/destructors,这需要调用__cxa_atexit(我们已禁用它,因为同样的原因它也给出了未定义的引用错误)或atexit。
我也尝试在我的代码中定义一个任意的atexit函数,但显然链接器不想与此有任何关系(这对我来说似乎很奇怪)。
所以我的问题是:如何让链接器不抱怨atexit,而不必包含标准库?
提前致谢!