我试图不了解如何在C ++中将结构用作列表。我想出了一段代码,对我的不了解应该不会导致任何错误,但是确实可以。
我的代码是这样的:
struct item {
int data;
struct item *next;
};
struct item *begin = NULL;
void add(int x) {
struct item *a = new struct item();
a->data = x;
a->next = begin;
begin = a;
}
int main() {
add(2);
printf("%d\n", begin->data);
return 0;
}
它给了我这个:
Undefined symbols for architecture x86_64:
"operator new(unsigned long)", referenced from:
add(int) in structtest-f49486.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我在Mac终端中使用GCC运行我的代码。我之前从未见过此类错误。我发现删除行时不存在错误
struct item *a = new struct item();
谁能告诉我这是怎么回事?
谢谢,
快活的
g++
不要使用gcc
。似乎正在尝试将您的C ++代码链接为C代码。
这样的GCC很奇怪。当您使用g++
到链接,它静静地增加了C ++支持库,比如一个定义默认operator new
。
是的,它“忘记了”它只是将代码编译为C ++。不要问我为什么。
关于clang
和gcc
,这是我在Mac上看到的内容:
$ gcc --version
gcc (MacPorts gcc48 4.8.4_0) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ type -a gcc
gcc is /opt/local/bin/gcc
gcc is /usr/bin/gcc
$ /usr/bin/gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.3.0
Thread model: posix
$ ls -lF /usr/bin/gcc
-rwxr-xr-x 1 root wheel 14160 Sep 29 2014 /usr/bin/gcc*
$ ls -lF /usr/bin/g++
-rwxr-xr-x 1 root wheel 14160 Sep 29 2014 /usr/bin/g++*
$ file /usr/bin/gcc
/usr/bin/gcc: Mach-O 64-bit executable x86_64
$ file /usr/bin/g++
/usr/bin/g++: Mach-O 64-bit executable x86_64
$ diff /usr/bin/g++ /usr/bin/gcc
Binary files /usr/bin/g++ and /usr/bin/gcc differ
请注意,我已经安装了MacPorts,并通过它安装了真实的GCC 4.8,并且已将其配置为“替换” Apple的“ gcc”。顺便说一句,苹果gcc
不是符号链接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句