我将以下代码从a previous question剪切并粘贴到名为“avishay.cpp”的文件中,然后运行
gcc avishay.cpp
仅从链接器获取以下错误消息。出了什么问题,我该怎么做?
carl@carl-ubuntu:~/Projects/StackOverflow$ gcc -static avishay.cpp
/tmp/cccRNW34.o: In function `__static_initialization_and_destruction_0(int, int)':
avishay.cpp:(.text+0x41): undefined reference to `std::ios_base::Init::Init()'
avishay.cpp:(.text+0x46): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cccRNW34.o: In function `A::func()':
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x11): undefined reference to `std::cout'
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x16): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x1e): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x26): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x36): undefined reference to `std::cout'
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x3b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
/tmp/cccRNW34.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
C ++代码(不是我的代码,我只是试图运行它):
#include <iostream>
using namespace std;
class A
{
private:
int _dmember;
public:
void func()
{
cout<<"Inside A!! "<<endl;
cout<<_dmember; // crash when reach here.
}
};
int main ()
{
A* a= NULL;
a->func(); // prints "Inside A!!!"
return 1;
}
答案 0 :(得分:69)
您应该使用g++
而不是gcc
来编译C ++程序。
对于这个特定的节目,我只是输入
make avishay
让make
弄明白其余部分。为您的可执行文件提供一个不错的名称,而不是a.out
。
答案 1 :(得分:11)
你可能应该使用g ++而不是gcc。
答案 2 :(得分:9)
是的,使用g ++进行编译。它将自动添加libstdc ++的所有引用,这些引用是链接程序所必需的。
g++ source.cpp -o source
如果省略-o
参数,则生成的可执行文件将命名为a.out
。在任何情况下,都已设置了可执行权限,因此无需chmod
任何内容。
此外,代码将为您提供未定义的行为(可能还有SIGSEGV),因为您正在取消引用NULL指针并尝试在不存在的对象上调用成员函数,因此它肯定不会打印任何内容。它可能会崩溃或做一些时髦的舞蹈。
答案 3 :(得分:5)
更新你的apt-get:
$ sudo apt-get update
$ sudo apt-get install g++
运行program.cpp:
$ g++ program.cpp
$ ./a.out
答案 4 :(得分:4)
g ++是linux下的C ++编译器。代码看起来正确。您可能缺少使用的库引用:
g ++ -l {库名在这里(数学fns使用“m”)} codefile.cpp
答案 5 :(得分:4)
使用
克++
空格后跟程序名称。 e.g:
g++ prog.cpp
如果在这种情况下文件名为“prog.cpp”。 如果你想运行程序写:
./prog
所以我用了
“PROG”
因为这是我的文件名。
答案 6 :(得分:4)
即使你可以通过gcc编译你的c ++代码 听起来好笑?是的。 试试吧
$ gcc avishay.cpp -lstdc++
享受
答案 7 :(得分:2)
使用g ++。并确保安装了相关的库。
答案 8 :(得分:1)
你可以使用g ++ --std = c ++ 0x example.cpp -o example
答案 9 :(得分:1)
要编译.sidebar {
width: calc(50% - 160px);
height: 100vh;
position: absolute;
margin-top: 76px;
right: 0;
margin: 0;
top: 0;
margin-right: -100%;
box-sizing: border-box;
padding: 30px 80px 60px;
z-index: 3;
overflow-y: scroll;
background: black;
-webkit-transition: margin-right 1.2s ease;
transition: margin-right 1.2s ease;
}
,请运行
- (void) URLSession:(NSURLSession *)session dataTask: (NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
completionHandler(NSURLSessionResponseAllow);
}
此命令将source.cpp
编译到同一目录中的文件g++ source.cpp
。
要运行已编译的文件,请运行
source.cpp
如果使用a.out
编译其他源文件,则新编译的文件./a.out
将覆盖使用g++ source2.cpp
生成的a.out
如果要将a.out
编译为特定文件,请说source.cpp
,
跑
source.cpp
或
compiledfile
这将创建g++ source.cpp -o compiledfile
,它是已编译的二进制文件。运行g++ -o compiledfile source.cpp
,运行
compiledfile
如果compiledfile
中没有./compiledfile
,请将g ++替换为g++
。
答案 10 :(得分:0)
安装gcc并尝试下面的视频
试试这个:
https://www.youtube.com/watch?v=A6v2Ceqy4Tk
希望它对你有用。