3

g++ の代わりに clang++ を使用するように既存の scons ビルド システムを適応させようとしています。-O0 または -O2 を使用すると (どちらも llvm IR を出力しません)、問題なく動作します。つまり、ビルドはエラーなしで完了します。リンク時の最適化を可能にするために llvm バイトコードにコンパイルする -O4 を使用すると、最終リンクでビルドが失敗します。

さまざまな場所を検索しましたが、コマンドラインで直接、または SConstruct ファイルでそれを知って、これを修正する方法が正確にはわかりません。

:設定env['LINK'] = "/path/to/llvm-link"により、すべての依存関係チェックが失敗します。

:コマンドへの追加-Xlinker "-plugin" -Xlinker "/usr/lib/LLVMgold.so"はうまく機能します。したがって、問題は、SConstruct での clang の選択を条件としてこれを追加する方法です。

$ /usr/sbin/distcc clang++ -o build/release/filex.o -c -std=c++11 -march=core-avx-i -W -Wall -O4 \
    -DHAVE_LLVM=0x0303 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS \
    -D__STDC_LIMIT_MACROS -D_GNU_SOURCE=1 -D_REENTRANT -DHAVE_CONFIG_H -D_X11 \
    -DFIFODIR='"/var/run/dir"' -I. -Isrc -I/usr/include -I/usr/include/SDL src/filex.cpp
...
$ ar rc build/release/libfile2.a build/release/filea.o build/release/tools/fileb.o
$ ranlib build/release/libfile2.a
...
$ /usr/sbin/distcc clang++ -o mybinary -pthread build/release/file1.o \
    build/release/libfile2.a ... -L/usr/lib -lLLVMBitWriter -lLLVMX86Disassembler \
    -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMMCParser \
    -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT \
    -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMCodeGen -lLLVMObjCARCOpts -lLLVMScalarOpts \
    -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC \
    -lLLVMObject -lLLVMCore -lLLVMSupport -lz -lffi -ldl -lm -lboost_iostreams -lSDL \
    -lSDL_net -lpthread -lboost_system -lpangocairo-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 \
    -lcairo -lfontconfig -lfreetype -lboost_program_options -lboost_regex -lSDL_ttf \
    -lSDL_mixer -lvorbisfile -lSDL_image -lX11

/usr/sbin/ld.gold: error: build/release/file1.o:1:3: invalid character
/usr/sbin/ld.gold: error: build/release/file1.o:1:3: syntax error, unexpected $end
/usr/sbin/ld.gold: error: build/release/flie1.o: not an object or archive
4

1 に答える 1

3

重要なのは、構文ではなく追加-Wl,-plugin,/path/to/LLVMgold.soすることです。LINKFLAGS-Xlinker...

于 2013-10-28T22:08:17.200 に答える