Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么会叮当作响++;在Mac上编译失败,在Mavericks下,除了sudo? 在我的Mac上最近更新了一个软件之后,我就不能编译和链接一个没有SUDO的C++ Hello World程序。p>_C++_Macos_Clang_Xcode6 - Fatal编程技术网

为什么会叮当作响++;在Mac上编译失败,在Mavericks下,除了sudo? 在我的Mac上最近更新了一个软件之后,我就不能编译和链接一个没有SUDO的C++ Hello World程序。p>

为什么会叮当作响++;在Mac上编译失败,在Mavericks下,除了sudo? 在我的Mac上最近更新了一个软件之后,我就不能编译和链接一个没有SUDO的C++ Hello World程序。p>,c++,macos,clang,xcode6,C++,Macos,Clang,Xcode6,程序(helloworld.cpp): 失败并出现错误: ld:无法写入架构x86_64的输出文件:a.out 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用) 但如果我在sudo手下这么做 sudo clang++ helloworld.cpp 没问题 这可能是什么原因造成的,我怎样才能解决这个问题? 再次编辑:答案不是像一些人建议的那样是工作目录权限,而是与我的hello world程序的输出文件a.out相关的权限。解决方案要归功于Petesh。您必须位于用户无法写入的目

程序(helloworld.cpp):

失败并出现错误:

ld:无法写入架构x86_64的输出文件:a.out 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)

但如果我在sudo手下这么做

sudo clang++ helloworld.cpp
没问题

这可能是什么原因造成的,我怎样才能解决这个问题?

再次编辑:答案不是像一些人建议的那样是工作目录权限,而是与我的hello world程序的输出文件a.out相关的权限。解决方案要归功于Petesh。

您必须位于用户无法写入的目录中。查看
pwd
ls-ld.
查看您的位置和权限。还可以尝试在运行Clang的同一目录中通过触摸foo.txt创建一个空文件。

最有可能的答案是,当当前工作目录不是您有写入权限的目录时,您正在运行Clang++

请尝试运行以下命令,确保目录归您所有/可写:

sudo chown -R `whoami` .
(注意,这可能不合适,具体取决于您所在的目录)


在某些情况下,这是在项目中OSX更新/升级之后发生的,之前不需要这样做。

您可能以root用户身份(通过sudo)运行gcc,因此生成的a.out文件归root用户所有。所以只要删除它,问题就会消失


你为什么这么做?因为令人恼火的是,xcode让您以这种方式运行,以同意许可协议

谢谢你的建议,但是不行,touch-foo.txt很好用。出于绝望,我已经在我的工作目录Xcode.app上完成了chmod-ra+rx,以及我能找到的所有include目录。@RobLachlan:请给我们看看我提到的命令的输出。一定要在运行Clang的同一个终端上运行它们,没有可能改变环境的干预命令。它们是附加的。我不得不承认,我很困惑。dtruss-f-t OpenClang++helloworld.cpp怎么样?这将为您打印打开的系统调用,以便您可以看到失败的路径。感谢指向dtruss实用程序的指针,这很有帮助。我接受这个答案,因为这是最接近的,而且非常有帮助。谢谢你的想法,但不,这是我的桌面。我在上面做了一个chmoda+rx,但是没有变化。你也需要+w+rx表示读取和执行(对于目录,用作CWD)。如果目录中已经有一个名为a.out的文件,由root所有,那么这正是您将得到的错误。首先尝试删除该文件(sudo rm a.out),命令应该succeed@Petesh当前位置实际上就是这样,我现在觉得自己很傻。非常感谢。我不明白。。。为什么你接受了一个没有解决问题的答案???节省了我一两个小时。
sudo clang++ helloworld.cpp
sudo chown -R `whoami` .