折腾llvm的win32编译.

LNK1107: 文件无效或损坏: 无法在 0x2D8 处读取.
这是由于,在c++中,lib是链接时用,而dll是在编译时用.所以编译时不用dll,而应该用lib文件.
llvm说可以在x64机上编译x86位,我试了几下都不行,始终就是x64位.
还是在老机子上跑.把并行设置改小点.
又可以写一篇文章了.写我如何折腾llvm上的32位编译.
说我是折腾大王,简直没问题.
好,开始.
cmake是折腾必备工具.
为了让llvm能在32位上跑.我费劲心思折腾.我自己的32位机子,直接编译是要出问题的.我也不知道在哪,我只知道,即使把并行编译设置为2,我的机子都要死机.即32位机子无论如何是编译不了的(好像是32位内存不够?).必须用64位.在折腾的后期发现如果你在cmake的gui中弹出的第二个框中输入host=x64是不行的,报错说:你是32位,不是x64主机,对不起,编译不了.因此,就现在的最新的llvm9.0版本而言,是不可能在32位上编译成功的,反正在我的机子上,无论如何要死机或许你的机子神通广大,没问题.
为了编译32位版本的,我找遍了网络.到处找.
主要参考在官网这里,然而这个的参考虽多,却无用.看嘛:
CMAKE_INSTALL_PREFIX这个选项,要设置,不然,你最后编译后,对不起,你没有写入的权限.
LLVM_TARGETS_TO_BUILD:STRING这个选项,毛用没有.无论我怎么改,始终在64位机子上都是改了没用.毛用没有.
LLVM_BUILD_32_BITS这个玩意儿,没用.
自己设置LLVM_TARGET_ARCx86i686啥的,没用.
cmake里面搜索x86_64,然后把x86_64全部手工改为i686,没用.
cmake选项里面添加win32为1,没用.
最后,看见别人是大写,用WIN32改为1,没用.
然后,我看我老机子可以,我把我老机子生成的cmake全部复制过去.又是一大堆sdk版本不匹配,还有路径配置,等等杂七杂八的,搞不定.别人说能够重定向sdk,600多个,太多了,改不了.
然后翻来覆去的折腾,啊,就是折腾不成功.后来终于看见哦-Thost=x64原来是在cmake的弹窗后面改啊.-T的都添加在这里,我说人家为什么有个这个选项,我该在哪改呢?,原来在这.
我记得还看见一个命令是cmake . -A Win32 -Thost=x64,然而或许这个命令要在64位下试,但我可能没试,找不着了.可能这是正确的.就是这个-A Win32到底在哪改呢?.改半天,找不着,网上也没人,好像这些人都不用32位机子了.
最后,折腾半天,在那个弹窗里面,我又点了点其他的选项,还是没找着,于是又上网浏览,好像看见-Thost=x64了,别人的,别人的cmake上面直接就是Win64,哦----.我终于发现.
在这个弹窗紧接着的下面有个下拉菜单的选项,就是专门告诉你编译32位还是64位的,折腾人啊,累得很.终于找着了…其实过程比我描述的还要复杂,因为有些折腾过程,我已经忘记了.太累了.可又不得不折腾.没办法呀.网上也找不着.这些人都升级成64位机子了吗?
自己摸石头,真麻烦.用别人的东西,真麻烦.

通过本次折腾.以后就知道了在哪里改,交叉编译也一定是在这里.即在选编译器后面就是选平台.

posted @   zjh6  阅读(44)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示