2017-06-12 25 views
0

私はLinux上で使用できるMakefileを作成しようとしていますが、macはアドレス消毒剤でビルドしています。これは私の浮浪者インスタンス上で動作します:LinuxおよびMac用のMakefile with address sanitizer

CC   = gcc 
ASAN_FLAGS = -fsanitize=address -fno-omit-frame-pointer -Wno-format-security 
ASAN_LIBS = -static-libasan 
CFLAGS := -Wall -Werror --std=gnu99 -g3 
LDFLAGS += -lpthread 

all: hello 

hello: tiny_queue.o hello.o 
    $(CC) -o [email protected] $(CFLAGS) $(ASAN_FLAGS) $(CURL_CFLAGS) $^ $(LDFLAGS) $(CURL_LIBS) $(ASAN_LIBS) 

これはubuntu/trusty64に動作しますが、MacとLinux用の互換性のあるメイクファイルを作成する方法誰を知ってい

$ make 
gcc -Wall -Werror --std=gnu99 -g3 -I/opt/X11/include -c -o hello.o hello.c 
gcc -o hello -Wall -Werror --std=gnu99 -g3 -fsanitize=address -fno-omit-frame-pointer -Wno-format-security tiny_queue.o hello.o -lpthread -static-libasan 
clang: error: unknown argument: '-static-libasan' 
make: *** [hello] Error 1 

で自分のMac上で失敗しますか?

p.s.私は非常にCに新しいです、この質問が超基本的な場合はごめんなさい。

+0

コンパイラとリンカーの両方に '-pthread'フラグを付けてマルチスレッドコードをビルドします。 '-lpthread'は適切ではありません。 –

+0

[AddressSanitizer](http://clang.llvm.org/docs/AddressSanitizer.html)を参照してください –

+0

これはC言語には関係ありません。 (厳密にはメイクファイルの質問でさえも)。 – Olaf

答えて

1
CC   = gcc 
ASAN_FLAGS = -fsanitize=address -fno-omit-frame-pointer -Wno-format-security 
ASAN_LIBS = -static-libasan 
CFLAGS := -Wall -Werror --std=gnu99 -g3 
LDFLAGS += -lpthread 

all: hello 

hello: tiny_queue.o hello.o 
    $(CC) -o [email protected] $(CFLAGS) $(ASAN_FLAGS) $(CURL_CFLAGS) $^ $(LDFLAGS) $(CURL_LIBS) $(ASAN_LIBS) 

あなたはは(そのことについて、またはUBsanライブラリ)牙山ライブラリを指定しないでください。コンパイラドライバを使用してリンクを駆動しているので、-fsanitize=address(これを実行することをお勧めします)を使用してください。 でなく、-static-libasanとなります。コンパイラドライバが適切なライブラリを追加します。

+0

ありがとう、それはトリックでした。 '-fsanatize = address'が既に' ASAN_FLAGS'に入っていたので、私は 'ASAN_LIBS'セクションを削除しました。 – Schneems

関連する問題