Linux下 gcc编译提示错误,,在函数_start中 main 未定义的引用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下 gcc编译提示错误,,在函数_start中 main 未定义的引用相关的知识,希望对你有一定的参考价值。
如题,有个什么crt1.o 我没记下来,,我想问一下,这是什么原因,
你是不是在编译静态库或者动态库?也就是没有main函数。如果是,再参考一下下边的提示。-c 参数表示将源文件编译成object(目标文件)。 即 gcc -c foo.c 会编译成 foo.o
gcc 不加参数时会编译且尝试链接成可执行文件,然而 foo.c 的代码中没有main函数的定义,所以最终无法成功链接,故报错。 参考技术A 你不给出代码,很难定位问题的。
linux下使用gcc/g++编译代码时gets函数有错误
今天在linux中使用个g++编译一个名为myfirst.cpp的代码的时候,出现如下错误
myfirst.cpp: In function ‘int main()’:
myfirst.cpp:11:2: warning: ‘char* gets(char*)’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(cc);
^
myfirst.cpp:11:9: warning: ‘char* gets(char*)’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(cc);
^
/tmp/ccoHyVHf.o: In function `main‘:
myfirst.cpp:(.text+0xad): warning: the `gets‘ function is dangerous and should not be used.
/tmp/ccoHyVHf.o: In function `__static_initialization_and_destruction_0(int, int)‘:
myfirst.cpp:(.text+0x103): undefined reference to `std::ios_base::Init::Init()‘
myfirst.cpp:(.text+0x112): undefined reference to `std::ios_base::Init::~Init()‘
collect2: error: ld returned 1 exit status
仔细看错误信息得知,gets函数是危险的,具体信息请百度或者google,但是我用gets函数目的仅仅是为了输入一串字符,系统的用不了,我就自己写一个
ps:以下操作都实在linux的终端中进行,系统版本为ubuntu 14.04 LTS
打开终端(ctrl+Alt+T)
touch cstdio//创建文件cstdio,我使用的是C++
vim cstdio//编辑cstdio,并添加以下内容
#include<cstdio>
void mygets(char *str)
{
int i=0;
scanf("%c",&str[i]);
while(str[i++]!=‘\n‘)
{
scanf("%c",&str[i]);
}
str[i-1]=0;// \0是字符数组中默认的字符串结尾,\0所对应的ascii码为0
}
这样自己的库函数就写好了,我不知道标准的库函数具体什么样,但是肯定不是我这样,嘿嘿
使用的时候,在头文件位置加上
#include"cstdio" //是双引号,而不是尖括号
mygets(str); //str书字符数组名
就可以在linux下间接使用gets函数了
若是使用C语言的写法的话,将
cstdio 文件的文件名
改为
stdio.h,将该文件的里面的
#include<cstdio>
改为
#include<stdio.h>
本文首发地址
https://www.textarea.com/suppermary/linux-xia-shiyong-gcc-g-bianyi-daima-shi-gets-hanshu-you-cuowu-564/
以上是关于Linux下 gcc编译提示错误,,在函数_start中 main 未定义的引用的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 gcc 在 Linux 中编译任何 c++ 程序,出现一些奇怪的错误 [重复]