Posted at

弱小PHPerのD言語挑戦記 1

More than 3 years have passed since last update.


弱小PHPerのD言語挑戦記

きっかけはTwitterで「D言語っていうマイナーな言語があるんだけど...」という呟きを見かけたから

D言語に関してはちょっと前から知ってたものの、どのようなものか知らなかったため、Google先生に聞いてみる

「CをJavaみたいにかける」「C++に取って代わる」

fmfm...面白そうじゃないですか!

早速Dコンパイラ(dmd?)とatomのDプラグインをインストール

まずはhello,worldということで、下のコードをコンパイラに突っ込む


test.d

import std.stdio;

void main(){
writeln("hello,world");
}

あれ、test.oというファイルは出るものの、肝心の実行ファイルが出ない

よく見るとエラーが...

コンパイラなんてものを触るのは初めてなので、何が悪いのかよくわからない...

しかしさすがD言語、コンパイラのエラー文が日本語で出てくる

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: 関数 _start' 内:

(.text+0x20):
main' に対する定義されていない参照です

collect2: error: ld returned 1 exit status

--- errorlevel 1

あれ...?

main関数ちゃんと書いてますよね...

文法も間違ってないはずですし(wikiから引っ張ってきた)

うむむ...これはコンパイラの仕組みとかを理解しないとダメなパターンですかね

というわけで、Google先生に聞いたところ

ソースコードはまずコンパイラに通されてオブジェクトファイル(*.o)に変換され、その後ライブラリなどとリンクされて実行ファイル(*.exeや拡張子なしのファイル)になる

とのこと

test.oというファイルは出ているので、このリンクというプロセスでエラーが出ている模様

更に調べてみると...

「D言語はリンクの際に一部gccの機能を使っている」(あやふやなので真偽不明)とのこと

gccはc言語のコンパイラだったはず...

一応、グラフィックカードのインストール時に必要だったためgccはインストール済みです

ということは...わからない...

やっぱり弱小PHPerには無理だったのか

諦めるしかないのか...

諦めかけたその時、Twitterで親切にも手を差し伸べてくれた方が!(ありがとうございます!!)

曰く「リンカがおかしいかも」とのこと

リンクの処理がおかしいという見当はあってる...?

全く間違ってるわけではなく、ある程度は理解出来てる?

とにかく無理だと諦めたらそこで終了、できる限りはやり切る!

ということで、情報収集とTry&Error!

めげずにやってみます!