1. ホーム

linux コンパイル (.text+0x20): 'main' への未定義の参照 collect2: error: ld returned 1 | (.text+0x20):undefined reference Scrt1.o

2022-02-16 04:09:26
<パス

@[TOC](linux compiles with (.text+0x20): undefined reference to 'main' collect2: error: ld returns 1 | (.text+0x20): undefined reference to `main ' and undefined reference to function Solution).

linux は (.text+0x20): 'main' への未定義の参照でコンパイルします collect2: error: ld returns 1 | (.text+0x20): `main' への未定義の参照と関数への未定義の参照 Solution

オペレーティングシステム

ubuntu18.04 hpbook2000 gccバージョン7.3.0

ストーリー

まず、国内のサイトをお借りしたのですが、そのほとんどがMakefileが非常におかしいと書かれており、ソースコードをコンパイルする際の問題かと思いましたが、皆さん"apt install gcc &&apt install g++" でインストールしており、このエラーが発生しないとのことです。その時は甘かったので、1日待ちました ソースコードはgccをコンパイルしています。

それでもダメで、上記のエラーが出ます。ではどうすればいいかというと、インターネットではmainを_startにするか、main関数名でなければOKになると書いてありました。私は何をすべきかわからない。誰かが主な理由は、Scrt1.oの主な関数名は、それの使用の前に定義されているので、エラーが報告されると述べた。まあ、方法がわかっても.oファイルを変更することはできないんですけどね。

ネットでは、gcc&g++に-nostdlibまたは-nostartfileパラメータを追加することで変更する方法があるそうです。コンパイルした後、カーネルがないと言われ、余計におかしくなる。そしてsegmentation fault Funny、これは.oファイルを無理やり歪ませた結果です。

## 私の解決策
// The most nonsensical solutions often work best, just like the bad pencil method.
 cd /usr/lib/ && cp crt1.o Scrt1.o


g++とgccは紐付けされているので、一緒に解決します。