【问题标题】:C++ Hello world won't compile? Seems to be a linking issue… [duplicate]C++ Hello world 不会编译?似乎是一个链接问题...... [重复]
【发布时间】:2014-04-19 18:11:27
【问题描述】:

以下 Hello World 程序在 Xcode 中编译,但在终端中使用 via clang 编译时不能:

#include <iostream>
int main()
{
  std::cout << "Hello World!";
}

具体来说,我使用的命令是:

clang c++test.cpp

其中 c++test 是文件的名称。 这会产生一堆乱码错误,例如:

(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*,     
char const*, std::__1::ios_base&, char) in c++test-497cf6.o

还有这个:

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我检查了一下,系统上出现了 c++ 库,所以我很确定我正在做一些工作。是否有我需要链接到的 -framework?

【问题讨论】:

  • 不是原因,而是将return 0添加到main并尝试更改文件名(删除++符号)
  • 您的错误是胡言乱语,因为您没有阅读整个内容。而且您甚至都懒得发布整个错误。
  • @bolov: Re:return 0,不,这根本不需要,参见例如stackoverflow.com/questions/22239/why-does-int-main-compile
  • @rubenvb:是的,它是重复的。我很抱歉。我筛选了几个答案相似的问题,但“我的代码无法编译”是一个非常常见的问题。
  • @Dan:我没有发布错误,因为有一百行 em。而且我不认为(我是对的)这部分错误与答案相关。

标签: c++ terminal clang


【解决方案1】:

如果您编译/链接 C++,请使用 (clan)g++。这将确保 C++ 标准库也被链接。

或者,将-lstdc++ 或在您的情况下为-lc++ 添加到链接命令。不过我会打电话给clang++

【讨论】:

  • 是的,我使用命令行而不是终端的原因是因为我正在制作一个 applescript droplet 来将文件传递给 CL。因此,我可能只会将“-lstdc++”附加到 shell 脚本中。非常感谢!
  • @rubenvb btw.,当你在这里时,我(我想我)知道你很久以前就为 windows 添加了一些异常支持。你知道现在官方发布的情况如何吗?一切就绪还是还有一段路要走?​​span>
  • @Cheersandhth.-Alf dw2(32 位)异常处理在很久以前就已修复。现在正在进行 seh(64 位)实现以匹配 GCC 的 seh 实现的工作。见here。这是补丁的 clang 部分,LLVM 部分链接在其中。我没有测试过这些补丁。我在休息室的“尤里卡”来得太快了,我什么都没做。我相信还有一大步需要修复(参见here)。我认为这是 MinGW 特有的,坦率地说,我不知道这与 MSVC 兼容性有何关系。
猜你喜欢
  • 2014-07-19
  • 1970-01-01
  • 2020-02-08
  • 2012-01-20
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多