llvm编译、自带例子toy、llvm编译报错解决、.lib中搜索指定函数名

news2025/1/11 22:50:25

hunterzju/llvm-tutorial

cs.cmu.edu/academic/class/15745-s14/public/lectures

编译llvm

cd /d d:\llvm-home\
git clone git@gitcode.net:pubz/llvm-project.git

cd /d d:\llvm-home\llvm-project\
git status
#HEAD detached at llvmorg-11.0.0
 

set PATH=%PATH%;D:\Python38\Scripts\;D:\Python38\;D:\cmake-3.25.0-windows-x86_64\bin;D:\MicrosoftVisualStudio2019Enterprise\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x86;D:\MicrosoftVisualStudio2019Enterprise\MSBuild\Current\Bin
#cmake -S llvm -B build  -G "Visual Studio 16 2019"    -DLLVM_ENABLE_PROJECTS=mlir,polly   -DLLVM_BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Debug  -DLLVM_ENABLE_ASSERTIONS=ON  -DLLVM_ENABLE_PROJECTS="clang;llvm"  -DCMAKE_CXX_FLAGS="/bigobj"  -DLLVM_TARGETS_TO_BUILD=X86  #废弃
cmake -S llvm -B build  -G "Visual Studio 16 2019"     -DLLVM_BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CONFIGURATION_TYPES=Debug  -DLLVM_ENABLE_ASSERTIONS=ON  -DCMAKE_CXX_LINK_FLAGS="/LIBPATH:.\\debug\\lib /LIB:.\\debug\\lib   "   -DLLVM_ENABLE_PROJECTS="clang;llvm;mlir;polly"  -DCMAKE_CXX_FLAGS="/bigobj"  -DLLVM_TARGETS_TO_BUILD=X86  -DLLVM_INCLUDE_TESTS=False  -DLLVM_BUILD_TESTS=OFF
cd build
msbuild LLVM.sln

  
"""

mlir
llvm build

编译完后找mlir例子

cd build
find . -path *mlir*example*

编译成功的样子:
在这里插入图片描述

llvm自带例子

d:\llvm-home\llvm-project\mlir\examples\toy
在这里插入图片描述

报错解决

1. LINK : fatal error LNK1104: 无法打开文件“gtest_main.lib”

解决办法: 改成全路径
在这里插入图片描述

<AdditionalDependencies>..\..\..\..\Debug\lib\LLVMSupport.lib;..\..\..\..\Debug\lib\LLVMSupport.lib;..\..\..\..\Debug\lib\gtest_main.lib;..\..\..\..\Debug\lib\gtest.lib;</AdditionalDependencies>
<AdditionalDependencies>..\..\..\..\Debug\lib\LLVMSupport.lib;..\..\..\..\Debug\lib\LLVMSupport.lib;gtest_main.lib;gtest.lib;</AdditionalDependencies>
#bash

cd build
#find . -name "*.vcxproj" | xargs -I@ grep -Hn  ";gtest_main.lib" @
#找到有这种相对路径的,  用py脚本处理这些文件
find . -name "*.vcxproj" | xargs -I@  cp -v @ @.original #备份
#/c/Windows/System32/chcp.com 936
find -path *unittests*.vcxproj  -a -type f | xargs -I@ sh -c "cp -v @.original   @; python /d/llvm-home/llvm-project/compile-fix/replace_vcxproj.py @" # 处理(可多次执行本行)

# -*- coding: UTF-8 -*-

#pip install lxml
#d:/llvm-home/llvm-project/compile-fix/replace_vcxproj.py

libDir:str="D:\\llvm-home\\llvm-project\\build\\Debug\\lib"
def replace_vcxproj(fileFullPath: str):
    _text=None
    text:str=None
    with open(fileFullPath, encoding='utf-8') as f:
        text = f.read()
    if not ( text.__contains__(";gtest_main.lib") or text.__contains__(";gtest.lib") ):
        print("无需处理, 因为不含 ';gtest_main.lib' 和 ';gtest.lib'")
        return
    # 替换
    _text =  text.replace(";gtest_main.lib", f";{libDir}\\gtest_main.lib")  .replace(";gtest.lib", f";{libDir}\\gtest.lib")
    # 写入结果
    with open(fileFullPath, "w", encoding='utf-8') as of:
        of.write(_text)
        print(f'处理{fileFullPath}')

if __name__=='__main__':
    import sys
    assert len(sys.argv) >= 1
    replace_vcxproj(sys.argv[1])
但是 家里的电脑 msbuild出的 .vcxproj 的AdditionalDependencies中 gtest*项都是全路径 无需修复

在这里插入图片描述

2. diff找不到

#https://gnuwin32.sourceforge.net/packages/diffutils.htm
cd /d/
wget https://nchc.dl.sourceforge.net/project/gnuwin32/diffutils/2.8.7-1/diffutils-2.8.7-1-bin.zip
wget https://nchc.dl.sourceforge.net/project/gnuwin32/diffutils/2.8.7-1/diffutils-2.8.7-1-dep.zip

unzip diffutils-2.8.7-1-bin.zip -d /d/diffutils-2.8.7-1-bin/
unzip diffutils-2.8.7-1-dep.zip -d /d/diffutils-2.8.7-1-bin/

tree -L 2 /d/diffutils-2.8.7-1-bin/
"""
/d/diffutils-2.8.7-1-bin/
├── bin
│   ├── cmp.exe
│   ├── diff.exe
│   ├── diff3.exe
│   ├── libiconv2.dll
│   ├── libintl3.dll
│   └── sdiff.exe
"""


删掉 polly-check-format.vcxproj 中 “…ScopDetection.h | diff …” 的diff部分,具体如下:
在这里插入图片描述

继续编译 可正常编译


set path=%path%;D:\diffutils-2.8.7-1-bin\bin\
cd d:\llvm-home\llvm-project\build\
msbuild LLVM.sln 

3. llvm\unittests\Support\JSONTest.cpp报错

JSONTest.cpp 中的不可见符号都去掉

file:  D:\llvm-home\llvm-project\llvm\unittests\Support\JSONTest.cpp 
// Direct tests of isUTF8 and fixUTF8. Internal uses are also tested elsewhere.
//...
  for (auto Invalid : std::vector<std::pair<const char *, const char *>>{
           {"lone trailing \x81\x82 bytes", "lone trailing a bytes"},
           {"missing trailing \xD0 bytes", "missing trailing a bytes"},
           {"truncated character \xD0", "truncated character a"},
           {"not \xC1\x80 the \xE0\x9f\xBF shortest \xF0\x83\x83\x83 encoding",
            "not a the a shortest a encoding"},
           {"too \xF9\x80\x80\x80\x80 long", "too a long"},
           {"surrogate \xED\xA0\x80 invalid \xF4\x90\x80\x80",
            "surrogate a invalid a"}}) {
    EXPECT_FALSE(isUTF8(Invalid.first)) << Invalid.first;
    EXPECT_EQ(fixUTF8(Invalid.first), Invalid.second);
  }
}
//...

差异见下图:
在这里插入图片描述

其他问题解决

llvm-project目录 跨盘符

家里电脑和公司电脑 llvm-home所在盘符不一致解决: mklink 符号链接

#家里电脑目录为e:\llvm-home\   ;公司电脑目录为d:\llvm-home\,  文档中用的目录也是d:\llvm-home\
#所以在家里电脑  用 符号链接 d:\llvm-home  指向   e:\llvm-home

#创建符号链接:
mklink /j d:\llvm-home e:\llvm-home
mklink /j d:\instrmcpp e:\instrmcpp

#以下这种貌似也行:
mklink /D d:\instrmcpp e:\instrmcpp

#查看符号链接:
dir /AL  d:\
#2022/12/03  08:46    <JUNCTION>     llvm-home [e:\llvm-home]
#2022/12/06  22:46    <SYMLINKD>     instrmjcpp [e:\instrmcpp]

mklink /?
"""创建符号链接。
MKLINK [[/D] | [/H] | [/J]] Link Target
        /D      创建目录符号链接。默认为文件 符号链接。
        /H      创建硬链接而非符号链接。
        /J      创建目录联接。
        Link    指定新的符号链接名称。
        Target  指定新链接引用的路径 (相对或绝对)"""

搜索

.lib 中搜索指定函数名

.lib 其实是 ar 类型的压缩包, 可以用 7z之类的解压软件打开

#基于: msys2
#7z解压.lib例子
export PATH=$PATH:/d/7-Zip/
7z x   build/tools/mlir/lib/Dialect/Affine/Utils/obj.MLIRAffineUtils.dir/Debug/obj.MLIRAffineUtils.lib  -o/e/tmp/ -y  -x'!obj.*.dir'
#基于: msys2

#把以下内容保存为文件 /d/search_func_in_lib_dir.sh
find . -name "*.lib" -a -type f | xargs -I@ sh -c "rm -fr /e/tmp/*; 7z x   @  -o/e/tmp/ -y  -x'r!obj.*.dir' >/dev/null  ; echo @; grep -Hn getMutableSuccessorOperands @"

#然后执行
sh /d/search_func_in_lib_dir.sh
#注意不要用 bash 否则会报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ImmunoChemistry丨艾美捷NIR-FLIVO 690游离染料对照试验说明书

ImmunoChemistry艾美捷ICT近红外&#xff08;NIR&#xff09;-FLIVO示踪剂与无NIR-FLIVO染料对照分析结合使用。无NIR-FLIVO染料控制试验使用无NIR-FRIVO染料检测试剂&#xff08;*Dylight690游离染料&#xff09;。注射时&#xff0c;游离染料对照物和示踪物试剂都会产生荧光信…

Java集合 超详细版+面试题

程序总是根据运行时才知道的某些条件去创建新的对象。在此之前&#xff0c;无法知道所需对象的数量甚至确切类型。为了解决这个普遍的编程问题&#xff0c;需要在任意时刻和任意位置创建任意数量的对象。下面讲详细介绍如何使用标准库中的集合类。 集合框架图 简化图&#xff…

遗传算法求解问题(1)

问题描述 在一个长度为 n 的数组中选择 10 个元素&#xff0c;使得 10个元素的和 与 该元组中元素总和的 1/10 接近 问题约束 数组长度 n&#xff1a;10 < n < 100; 数组中没有重复的数字&#xff0c;所以选择的10个元素中也没有重复的数字 遗传算法原理 请移步我上…

国产第一颗7A的车规级马达驱动芯片TMI8140-Q1

新能源汽车因其电动化和智能化的特性&#xff0c;需要大量的马达驱动、DC/DC、高效率Buck & BuckBoost等车规级芯片&#xff0c;成为名副其实的“芯片大户”&#xff01; 以往制造一辆传统汽车一般需要用到500-600颗左右的芯片&#xff0c;而一台高性能的新能源汽车需要芯…

上传IPA包到App Store​

我们都经历过上传IPA包到App Store时的痛苦&#xff01;&#xff01;&#xff01;​ 第一步&#xff1a;通过Xcode-> Archive&#xff0c;Validate App&#xff0c;成功&#xff01;​ 第二步&#xff1a;通过Xcode-> Archive&#xff0c;Distribute App&#xff0c;成…

从股票市场选择配对的股票:共同趋势模型与套利定价理论

股价取对数之后的序列建模为随机游走。现在把取对数之后的股价当作是由一个随机游走和一个平稳时序组成&#xff1a; 是随机游走部分&#xff0c;是平稳部分。取对数后的股价求差就得到回报。所以在时间的回报表示为&#xff1a; 表示非平稳部分的回报&#xff0c;表示平稳部分…

如何基于运维事件中心通过 logstash 进行日志关键字监控

日常运维过程中&#xff0c;很多场景都需要对日志关键字进行监测&#xff0c;以便第一时间发现应用/业务相关异常&#xff0c;这是一种比较常见的监控需求&#xff0c;所以也有很多方法可以实现关键字告警。对于简单的告警可以通过一些传统的监控工具实现&#xff0c;但对于体量…

从头开始搭建一个SpringBoot项目--SpringSecurity的配置

从头开始搭建一个SpringBoot项目--SpringSecurity的配置前言本文的目标使用到的依赖、Redis配置、通用返回实体类依赖Redis项目里的配置通用返回实体ResultResultCodeResultUtil配置文件配置的目录结构Spring Security的配置信息SecurityConfigWebMVCConfig用到的类及代码自定义…

深入浅出自定义创建spring-boot-starter

深入浅出自定义创建spring-boot-starter https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-auto-configuration 快速入手 第一步&#xff1a;新建模块 第二步&#xff1a;修改依赖 <?xml version"1.0" e…

关键词(三)

关键词一.最冤枉的关键字—sizeof二.“简单”的布尔类型—_Bool一.最冤枉的关键字—sizeof 前面我们说过定义变量是需要空间的&#xff08;声明不需要&#xff09;&#xff0c;同时你需要有类型像int,char…这些不同的类型会在内存中开辟不同大小的空间&#xff0c;而sizeof就可…

Web安全测试工具AppScan简述

01 安全测试的对象 了解常见的Web应用安全漏洞&#xff0c;参考OWASP Top 10 2017。 理解这些常见漏洞的攻击原理&#xff0c;如何判断系统是否存在这些漏洞、如何防止这些漏洞。 02 安全测试的实施 SQL注入测试 确认所有的解释器都明确的将不可信数据从命令语句或者查询语…

微服务囧途之BFF层登场

从单体架构演化为微服务架构后&#xff0c;架构者的期望是“模块A”“模块B” “后端服务”。 场景一 Web端和Mobile端都有一个详情页面&#xff0c;需要调用模块A的getDetail接口获取数据。假设Web端实际需要展示的字段是20个&#xff0c;Mobile端实际需要展示的字段是10个…

记一次Metrics-server异常

报错 前几天测试环境k8s集群做etcd的备份恢复。 所有的pod都起来了&#xff0c;包括metrics-server的状态也是 Running,部署新pod也没有异常&#xff0c;结果kubectl top 请求的时候报错了 Error from server (ServiceUnavailable): the server is currently unable to handle …

Spring cloud Consul 服务注册中心实战

Spring cloud Consul服务注册中心一、简介二、功能三、角色四、工作原理1、服务注册及发现2、服务调用五、起步1、下载2、安装六、实例一、简介 Consul 用于实现分布式系统的服务注册与配置&#xff0c;与其它方案相比&#xff0c;Consul 更 “一站式”&#xff0c;内置了服务…

移植lighttpd笔记

一、前言 lighttpd交叉编译并移植到iTop4412平台 二、编译环境 ubuntu 18.04pcrelighttpd交叉编译链:arm-none-linux-gnueabi三、编译过程 1.pcre交叉编译 tar -xvf pcre-8.38.tar.bz2 cd pcre-8.38/ ./configure --host=arm-none-linux-gnueabi --prefix=/ --enable-utf8 …

IDEA中如何实现 git stash 命令的可视化操作?

目录 问题现象&#xff1a; 问题分析&#xff1a; 拓展&#xff1a;git stash 相关命令 1、git stash 2、git stash save 注释 3、git stash list 4、git stash pop 5、git stash apply stash{编号} 6、git stash drop stash{编号} 7、git stash clear 8、git stash…

flutter 内网安装包生成二维码

参考 前言 有时候我们可能需要用手机访问电脑上的文件, 或者用手机测试电脑上编写的程序 此时 在同一个wifi网络的前提下我们可以这么做: 第一种 使用python 直接使用自带python工具开启http服务, 首先打开终端, 进入需要共享的目录,然后运行以下代码即可: python -m Simple…

React TreeSelect 组件使用和优化

1、自定义折叠和展开图标 此时就要用到switcherIcon属性&#xff0c;以下是antd中对switcherIcon属性的描述&#xff0c; switcherIcon自定义树节点的展开/折叠图标ReactNode | ((props: AntTreeNodeProps) > ReactNode)-具体使用如下&#xff1a; import { DownOutlined…

数据库原理及MySQL应用 | 事件

事件由一个特定的线程——事件调度器来管理&#xff0c;事件是根据指定时间表&#xff0c;在某一特定的时间点&#xff0c;触发相关的SQL语句或存储过程。 01、事件概述 事件(Event)是根据指定时间表执行的任务&#xff0c;是MySQL在相应的时刻调用的过程式数据库对象。它由事…

抓包分析ssh远程主机为何变慢了?

文章目录背景SSH协议握手过程ssh 抓包MAC层包传输tcp握手抓包解释三次握手的第一个报文- SYN包第一个报文对应的抓包详情三次握手的第二个报文- SYNACK包第二个报文对应的抓包详情三次握手的第三个报文- ACK包第三个报文对应的抓包详情ssh版本协议交换密钥协商key阶段Key Excha…