这几天搞这个编译问题人都快要炸裂了,属实不容易,看到编译就怕😟就当是积累一些编译问题的处理经验吧
先简单说说最后的解决方法:问题出现在3.26版本的pin,dll死活编译不出来,最后换个版本,用vs2019的工作夹解决问题
踩坑1-mingw32-make报错
版本信息3.26-windows,mingw32-make的时候报错
上网搜cut是linux的命令,最初编译so和o文件的时候没有问题,主要问题出在dll,想起来mingw有个make试试能不能解决
1 2 3 4 5 6 7 8 9 10
| PS \pin\pin-3.26-98690-g1fc9d60e6-msvc-windows\source\tools\Insmix> mingw32-make.exe 'cut' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 'cut' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 'cut' 不是内部或外部命令,也不是可运行的程序 或批处理文件. mkdir -p obj-intel64/ 命令语法不正确. mingw32-make: *** [../../../source/tools/Config/makefile.default.rules:50: obj-intel64/] Error 1
|
踩坑2-linux-wsl无法运行32位
但是尝试用wsl编译so和o也出现了点问题,记录一下,最后的解决方法是在VM虚拟机里使用
可以make,但是里面的pin是32位….运行不了
尝试sudo运行
看到文件夹中有个intel64,里面也有pin,尝试运行,提示缺乏链接库
但是找不到这个库,估计是工具内的
WSL无法运行32位程序
Bash On Windows(WSL)无法运行32Bit程序,报错cannot execute binary file: Exec format error解决办法
如链接中的指示,尝试交给qemu来执行这里的32位, 也可以用qemu-i386-static ./pin
来运行,很可惜又报错了
不想管了(;´д`)ゞ
踩坑3-cl命令找不到-link命令出现问题
后面发现在windows上使用make要提前安装cygwin make(其实文档上有写), 简单介绍就是可原生运行于Windows系统上的POSIX兼容环境,看图就明白了,是不是和linux上很像😀
在编译另一个tools时出现的问题,安装好cygwin后要给cygwin的bin配置一下环境变量,重新make报错
没有cl.exe的话就找,这是一个Microsoft C/C++ 编译器,如果有VS的话应该都有,添加到环境变量重新make
link.exe又出错了,就很烦
官档说明
最后还是选择慢慢看文档,官档+chatgpt的更详细解释
重新尝试make
出现这个错误回显是我在学习pin的时候在cpp里加了些中文注释,删掉重新make,终终于于全部通过了qwq,除了会报一个小waring
然鹅,尽管是通过了但是实际还是使用不了
踩坑4-vs2019无法解析的外部指令
看到另一种编译方法就是用文件给的工作空间进行编译
打开后把要编译的工具移入项目编译就行,但是这里还是报错了
避坑-换版本
当时也不知道咋想的,突然想换个版本测试一下,结果就成功了😅附带几张成功的截图吧,这里可以看到dll文件以及编译出来了
下面都是些warning,没报错就行qwq
测试一下
总结
pin的编译方法大概有下面这几种:
- 通过MyPinTool文件夹下的工作空间MyPinTool.vcxproj,在vs内进行编译
- 根据官档使用cygwin make以及对应目标架构(x86或x64)的Visual Studio命令提示符进行编译
- 换版本😁
References
Pin 3.26 User Guide
cygwin
Tenet 技术路线 (没错,这里也有一些编译问题处理的指导)