0

私は単純な HelloWorld.c プログラムを持っています (そのため、ここに配置します)、奇妙なエラーをスローしている LTO を有効にして、clang バージョン 3.3 でビルドしようとしています。cmakeを使用して構築してい-DCMAKE_TOOLCHAIN_FILEます。なしでこのプログラムを正常にビルドおよびリンク-fltoできますが、この修飾子を使用できるようにする必要があります。ツールチェーンは TileGX 用です (したがって、clang バージョン 3.3 のままにする必要があります)。だからここに私の環境があります:

Ubuntu 16.04
cmake Version 3.9.4
I built the TileGX toolchain on 16.04, as well as 14.04
I build clang Version 3.3 on 16.04 (can't build it on 14.04)

これが私のCMakeLists.txtファイルです:

cmake_minimum_required (VERSION 3.9)
project (HelloWorld)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -v -flto -static")

add_executable(HelloWorld HelloWorld.c)

フラグを追加した-vので、clang で何が起こっているかを確認してください。

リンクしようとしているclangからの出力は次のとおりです(読みやすいように再フォーマットされています):

clang version 3.3 
Target: tilegx-unknown-linux-gnu
Thread model: posix
./toolchains/univ_tilegx/usr/bin/tilegx-unknown-linux-gnu-ld -m elf64tilegx \
  -static -o HelloWorld \
  ./toolchains/univ_tilegx/usr/tilegx-unknown-linux-gnu/sys-root/usr/lib/crt1.o \
  ./toolchains/univ_tilegx/usr/tilegx-unknown-linux-gnu/sys-root/usr/lib/crti.o \
  ./toolchains/univ_tilegx/usr/lib/gcc/tilegx-unknown-linux-gnu/4.9.2/crtbeginT.o \
  -L./toolchains/univ_tilegx/usr/tilegx-unknown-linux-gnu/lib \
  -L./third_party/toolchains/univ_tilegx/usr/lib/gcc/tilegx-unknown-linux-gnu/4.9.2/ \
  -L./toolchains/univ_tilegx/usr/tilegx-unknown-linux-gnu/lib \
  -L./toolchains/univ_tilegx/usr/lib/gcc/tilegx-unknown-linux-gnu/4.9.2/ \
  -L/lib/../lib64 -L/lib -L/usr/lib -plugin ../lib/LLVMgold.so \
    CMakeFiles/HelloWorld.dir/HelloWorld.c.o \
  --start-group \
    -lgcc -lgcc_eh -lc 
  --end-group \
  ./toolchains/univ_tilegx/usr/lib/gcc/tilegx-unknown-linux-gnu/4.9.2/crtend.o \
  ./toolchains/univ_tilegx/usr/tilegx-unknown-linux-gnu/sys-root/usr/lib/crtn.o
./toolchains/univ_tilegx/usr/bin/tilegx-unknown-linux-gnu-ld: cannot find 0�: \
  No such file or directory
./toolchains/univ_tilegx/usr/bin/tilegx-unknown-linux-gnu-ld: error: 
  Failed to delete '0�': 0�: can't get status of file: No such file or directory
clang-3.3: error: linker command failed with exit code 1 (use -v to see invocation)
CMakeFiles/HelloWorld.dir/build.make:94: recipe for target 'HelloWorld' failed
make[2]: *** [HelloWorld] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/HelloWorld.dir/all' failed
make[1]: *** [CMakeFiles/HelloWorld.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

LLVMgold.so最初は、 Ubuntu 16.04 でビルドされた共有可能なオブジェクト ( ) と 14.04 でビルドされたリンカーを使用することの問題だと思いました。リンカは共有可能なオブジェクトを呼び出し、それがリンカにコールバックします。しかし、16.04 でリンカーをビルドしたので、まだエラーが発生します。

ビルドしたのでLLVMgold.so、リンカーが共有可能オブジェクトを呼び出したときに何が起こっていたかを追跡するコードをいくつか入れましたが、そこにあるものはすべて問題ないように見えます。奇妙な名前のファイルが見つからないことはわかりldますが、提供されているファイルのセットに含まれている可能性があるファイルはわかりません。

-fltoこの環境で使用できるように、想像できるすべてを試しました。誰もこれを見たことがありますか?それを解決する解決策はありますか?私ができること、またはすべきことは他にありますか?

4

1 に答える 1