2017-08-19 24 views
0

我想用LLVM啓用CFI來編譯mysql。該軟件的版本如下:使用CFI啓用編譯mysql

  1. 鐺 - 6.0
  2. 的mysql-26年6月5日
  3. 的binutils-2.28.1

我可以用下面的CONFIGRATION成功編譯MySQL:

CC="clang" CXX="clang++" CFLAGS="-g" cmake -DCMAKE_INSTALL_PREFIX=../mysql -DWITH_BOOST=./boost . 

然而,我不能與下面的配置編譯MySQL:

CC="clang" CXX="clang++" CFLAGS="-g -flto" CXXFLAGS="-g -flto" cmake -DCMAKE_INSTALL_PREFIX=../mysql -DWITH_BOOST=./boost . 

報告的錯誤是如下:

../mysys/libmysys.a: error adding symbols: Archive has no index; run ranlib to add one 
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation) 
make[2]: *** [extra/comp_err] Error 1 

的../mysys/libmysys.a由下列命令構成:

cd /home/zhangjun/work/mysql/mysql-5.6.26/mysys_ssl 
&& /home/zhangjun/tools/cmake/cmake-3.9.1-Linux-x86_64/bin/cmake -P 
CMakeFiles/mysys_ssl.dir/cmake_clean_target.cmake 
cd /home/zhangjun/work/mysql/mysql-5.6.26/mysys_ssl && /home/zhangjun/tools/cmake/cmake-3.9.1-Linux-x86_64/bin/cmake -E cmake_link_script CMakeFiles/mysys_ssl.dir/link.txt --verbose=1 
/usr/bin/ar qc libmysys_ssl.a CMakeFiles/mysys_ssl.dir/crypt_genhash_impl.cc.o CMakeFiles/mysys_ssl.dir/my_default.cc.o CMakeFiles/mysys_ssl.dir/my_getopt.cc.o CMakeFiles/mysys_ssl.dir/my_aes.cc.o CMakeFiles/mysys_ssl.dir/my_sha1.cc.o CMakeFiles/mysys_ssl.dir/my_sha2.cc.o CMakeFiles/mysys_ssl.dir/my_md5.cc.o CMakeFiles/mysys_ssl.dir/my_rnd.cc.o CMakeFiles/mysys_ssl.dir/my_murmur3.cc.o CMakeFiles/mysys_ssl.dir/my_aes_yassl.cc.o 
/usr/bin/ranlib libmysys_ssl.a 

我怎樣才能解決這個問題?


要修正這個錯誤,我發了電子郵件給卡羅琳泰斯,筆者 「在GCC & LLVM強制正向邊沿的控制流完整性」他說我應該使用LLVM的AR和runlib。上述錯誤是使用以下配置固定:

CC="clang" CXX="clang++" CFLAGS="-g -flto -fvisibility=hidden -fsanitize=cfi" CXXFLAGS="-g -flto -fvisibility=hidden -fsanitize=cfi" cmake -DCMAKE_{EXE,SHARED,MODULE}_LINKER_FLAGS="-flto -fsanitize=cfi" -DCMAKE_AR=/home/zhangjun/work/llvm/llvm-3.7.1/bin/llvm-ar -DCMAKE_RANLIB=/home/zhangjun/work/llvm/llvm-3.7.1/bin/llvm-ranlib -DCMAKE_NM=/home/zhangjun/work/llvm/llvm-3.7.1/bin/llvm-nm -DCMAKE_INSTALL_PREFIX=../mysql -DWITH_BOOST=./boost . 

不幸的是,anotehr錯誤:

ld: /home/zhangjun/work/llvm/llvm/tools/gold/gold-plugin.cpp:879: ld_plugin_status allSymbolsReadHook(): Assertion `ObjFilename.second' failed. 
clang-6.0: error: unable to execute command: Aborted (core dumped) 
clang-6.0: error: linker command failed due to signal (use -v to see invocation) 
make[2]: *** [extra/comp_err] Error 254 
make[2]: Leaving directory `/home/zhangjun/work/mysql/mysql-5.6.26' 
make[1]: *** [extra/CMakeFiles/comp_err.dir/all] Error 2 
make[1]: Leaving directory `/home/zhangjun/work/mysql/mysql-5.6.26' 
make: *** [all] Error 2 

任何機構可以幫助我解決這個錯誤?

回答

0

嘗試從標誌中刪除-flto。出於某種原因,在叮噹聲中,我有鏈接時間優化導致該問題。