Technical Knowledge

目次

gcc/g++

[アプリケーション]

MinGw 使用時コンパイルで「D:/tmp/cvs/ccLae3sD.o:main.cpp:(.text+0x5e): undefined reference to `_GetStockObject@4' collect2: ld returned 1 exit status」とエラーが出る。   Cygwin

リンクをはずし、「-mwindows」オプションをつける。

# g++ -mno-cygwin -mwindows main.cpp

<2006-01-25 水>

リンク時にライブラリとのリンクが認識されない。   Cygwin

ライブラリを先に記述しているため。 後に書く。

CFLAGS=-mno-cygwin -lwsock32
g++ -o a.exe $(CFLAGS) a.o

ではなく

CFLAGS=-mnocygwin
LDLIBS=-lwsock32
g++ -o a.exe $(CFLAGS) a.o $(LDLIBS)

<2007-09-03 月>

unix が定義されていたりしなかったりする。

–mno-cygwin を指定しているため。 –mno-cygwin を指定すると、unix が定義されなくなり、MINGW32 が定義される。


<2008-04-17 木>

プリプロセス終了時のマクロ定義を調べる。

プリプロセス終了時の定義済みマクロの一覧

# echo "" | gcc -E -dM -

C

# echo "" | gcc -E -dM -x c -

C++

# echo "" | gcc -E -dM -x c++ -

-mno-cygwin -mwindows 時

# echo "" | gcc -E -dM -x c++ -mno-cygwin -mwindows -

<2008-04-25 金>

アセンブラコードを生成

–S オプション を使用する。

# gcc -S sample.c

<2011-08-26 金>

Make

[アプリケーション]

別のディレクトリの make を実行すると無限ループになる。

移動後カレントディレクトリが戻っているため。 1 つのコマンドとして実行する。

cd $(DIR_SRC_CPP); \
make CC=$(CC) CFLAGS="$(CFLAGS)";

<2007-09-04 火>

別のディレクトリの make を実行するとき変数の値を引き渡す。

コマンドライン引数で渡す。

cd $(DIR_SRC_CPP); \
make CC=$(CC) CFLAGS="$(CFLAGS)";

<2007-09-04 火>

「cpp -> o」等既存ファイルからパス文字を生成する。

OBJS := $(patsubst %.cpp,$(DIR_OBJS)/%.o,$(wildcard *.cpp))

<2007-09-04 火>

Date: 2021-10-03