cmake如果不指定参数的话

时间:2022-02-16 04:07:59

一、环境搭建:

   系统:win10_X64

   ndk版本:ndk-r12b(ndk-r12b后续版本也适用)

   cmake-3.9.1-win64-x64.msi  用于针对差别编译器生成源代码构建文件,如使用VS则生成(.sln)等VS配置文件,如果使用gcc则生成(Makefile)

   mingw-w64-install.exe  基于windows的GNU gcc编译器

   python2.7  跑python脚本,不要使用3.0及以上版本

   cmake,mingw,python下载地点(百度网盘):https://pan.baidu.com/s/1v49gBKzF-2VAqMywvtnlUw  暗码:hd7z

   添加环境变量:C:\Python27

           C:\Program Files (x86)\mingw-w64\i686-7.2.0-posix-dwarf-rt_v5-rev1\mingw32\bin

           C:\Program Files\CMake\bin

   环境变量请按照软件具体安置路径配置

二、编译OLLVM

  1、搞清楚观点:LLVM 和 OLLVM

    LLVM是lowlevel virtual machine的简称,是一个编译器框架。苹果公司的Xcode 4.0之后用的都是LLVM编译器。

    LLVM 诞生于2003.10伊利诺伊大学香槟分校,首创人ChrisLattner,现任苹果公司『开发者工具』部门的主管。

     Obfuscator-LLVM (OLLVM)是瑞士西北应用科技大学安适尝试室针对LLVM编译组件开发的代码混淆工具,该工具完全开源,目的是为了增加逆向工程的难度,,保证代码的安适性。  

    Obfuscator-LLVM (OLLVM)集成了编译器,并且兼容LLVM撑持的所有语言(C,C++, Objective-C, Ada and Fortran)和平台(x86, x86-64, PowerPC, PowerPC-64,ARM, Thumb, SPARC, Alpha, CellSPU, MIPS, MSP430, SystemZ,and XCore)。

  2、编译说明

    git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git     mkdir build     cd build     cmake -G “MinGW Makefiles” -DCMAKE_BUILD_TYPE=Release ../obfuscator/      mingw32-make -j7
  网上很多资料上使用make命令,而不是mingw32-make命令,在我所安置的mingw并没有供给make命令,前面说明了我是在win10 64系统上通过mingw-w64-install.exe安置的。可能是系统不一样的原因。

    cmake如果不指定参数的话,会默认去选择当前电脑里已有的编译器,如果安置了VS的话,会自动去查找VS编译器

    如果筹算使用vs编译 

    cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/ 

    会生成32位的依赖版本 

    cmake -G “Visual Studio 15 2017 Win64” -DCMAKE_BUILD_TYPE=Release ../obfuscator/ 

    “Visual Studio 15 2017 Win64” 中的15和2017是指VS中平台工具集的编号与VS版本号的对应关系,14对应2015,12对应2013,如果要用VS编译,注意按照你所安置的VS版本进行配置。上面这种要领就会生成64位版本的编译环境,不过在测试编译时,32位正常编译通过,64位踩了很多坑,所以还是不建议使用VS编译。

    使用MinGw编译时,需要加上参数

    cmake -G “MinGW Makefiles” -DCMAKE_BUILD_TYPE=Release ../obfuscator/      

  3、编译过程约莫需要30分钟摆布或者更长,编译完成后build文件夹下可看到bin  和 lib  两个文件夹,这是后续需要用到的。

三、在ndk中使用ollvm

   1、android-ndk-r12b\toolchains路径下会有个  llvm  文件夹 ,复制 llvm  文件夹的一个副本到不异的路径(即android-ndk-r12b\toolchains路径下),然后重定名该文件夹为 ollvm-4.0 

   2、删失android-ndk-r12b\toolchains\ollvm-4.0\prebuilt\windows-x86_64路径下的bin 和 lib64 文件夹,将上述build目录下的bin 和 lib 两个文件夹拷贝到路径android-ndk-r12b\toolchains\ollvm-4.0\prebuilt\windows-x86_64;

   3、在 android-ndk-r12b\build\core\toolchains 路径下,新建目录 arm-linux-androideabi-clang-ollvm4.0,拷贝目录 arm-linux-androideabi-clang 下的文件 config.mk 与 setup.mk 到 arm-linux-androideabi-clang-ollvm4.0 中,改削setup.mk文件;

# # Override the toolchain prefix # ############################ 原始配置 ############################ #LLVM_TOOLCHAIN_PREBUILT_ROOT := $(call get-toolchain-root,llvm) #LLVM_TOOLCHAIN_PREFIX := $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/ ################################################################# ############################ 改削后 ############################# OLLVM_NAME := ollvm-4.0 LLVM_TOOLCHAIN_PREBUILT_ROOT := $(call get-toolchain-root,$(OLLVM_NAME)) LLVM_TOOLCHAIN_PREFIX := $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/ #其他配置不做改削 ......

config.mk 生存的是该编译链对应的 CPU 架构,所以上面改削完只能编译 armeabi 和 armeabi-v7a 架构的 so。如果需要编译其他架构需要做相应的改削。
文件夹名也必需凭据严格的格局,如 mips 的需要添加文件夹:mipsel-linux-android-clang-ollvm4.0,改削相应的 setup.mk 文件。

四、ollvm使用

  使用 ollvm 进行 ndk 的编译需要对 Application.mk 和 Android.mk 文件做相应的改削。

  Android.mk 中添加混淆编译参数:

    LOCAL_CFLAGS += -mllvm -sub -mllvm -bcf -mllvm -fla

  参数相关的文档可以看 github 上的wiki: https://github.com/obfuscator-llvm/obfuscator/wiki