Closed augustheart closed 4 months ago
然后重新编译,结果一切正常。证明问题就在noentry这里
跟 noentry 没任何关系,是你新增的 "src/main1.cpp"
自动修复了问题,因为没任何 cpp files 的 rc shared target ,它不会被探测为 c++ language target,你显式加上 add_rules("c++")
,也能绕过这个问题
由于 rc target 没加 cpp files,它的 linker flags 没走 c++ linker 的加载逻辑,而 load linker 内部有缓存,跟另外一个 c++ target 的 linker flags 缓存冲突干扰了。。
我改进了下缓存的 key ,应该可以了。。这种情况只发生在纯 rc target 没任何 cpp files 的情况。
xmake update -s dev
然后重新编译,结果一切正常。证明问题就在noentry这里
跟 noentry 没任何关系,是你新增的
"src/main1.cpp"
自动修复了问题,因为没任何 cpp files 的 rc shared target ,它不会被探测为 c++ language target,你显式加上add_rules("c++")
,也能绕过这个问题由于 rc target 没加 cpp files,它的 linker flags 没走 c++ linker 的加载逻辑,而 load linker 内部有缓存,跟另外一个 c++ target 的 linker flags 缓存冲突干扰了。。
我改进了下缓存的 key ,应该可以了。。这种情况只发生在纯 rc target 没任何 cpp files 的情况。
xmake update -s dev
5361
实测已经修正
Bot detected the issue body's language is not English, translate it automatically.
Then recompile and everything works fine. Prove that the problem lies here in noentry
It has nothing to do with noentry. Your newly added
"src/main1.cpp"
automatically fixes the problem. Because there is no rc shared target for cpp files, it will not be detected as a c++ language target. You have to add it explicitly. Usingadd_rules("c++")
can also circumvent this problem.Since the rc target does not add cpp files, its linker flags do not use the loading logic of the c++ linker, and the load linker has an internal cache, which conflicts with the linker flags cache of another c++ target. .
I improved the cache key and it should be fine. . This only happens with pure rc targets without any cpp files.
xmake update -s dev
5361
The actual measurement has been corrected
Xmake 版本
2.9.3
操作系统版本和架构
windows 11 23H2
描述问题
这个算是一个持续了两年的问题,之前的讨论中发现了这个问题,但是当时一来没分析到点子上,二来没几天工作就忙起来了(xmake相关只是我的业余爱好涉及),然后一拖就完全忘了这回事。直到这几天重新写了这个东西,然后发现了相同的问题,最后发现自己两年前就已经写过这东西,两年前就发现这个问题……废话不多说了,今天大概大脑转对了方向,终于发现了真正的问题所在: 最简单的项目: xmake.lua
main.cpp
soui-sys-resource.rc
resource.h
这就是一个最小的项目 然后:
期待的结果
可以看到,上面两个项目之间互相没有依赖关系,应该互不影响才对。两个项目分别独立编译,也是没有问题的。
但是,分别编译上面两个项目之后,紧接着xmake,炸了。
然后我再修改一下, 1.main.cpp复制一份,命名为main1.cpp,并且去掉MessageBox,这是为了不引用User32 2.target("res")中去掉add_shflags("/NOENTRY"),将main1.cpp加入编译
然后重新编译,结果一切正常。证明问题就在noentry这里
工程配置
--
附加信息和错误日志
然后是错误相关的详细日志
和两年前的结果一致,反正就是User32.lib没有传给link.exe
而单独编译时:
非常稳定地重现了。
最后注意到我使用xmake b --help时
在我手动编译两个项目之后,xmake b -a还准备干啥?