首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MinGW: Winp线程重写.rc资源文件信息

MinGW: Winp线程重写.rc资源文件信息
EN

Stack Overflow用户
提问于 2020-07-21 10:59:02
回答 1查看 398关注 0票数 0

我的MinGW项目使用boost库和间接线程。

我为我的项目创建了一个.rc资源文件,其中包含版本信息等等。

要静态链接我的可执行文件,我使用以下参数:

-static-libgcc -static-libstdc++ -Wl,-Bstatic,--whole-archive -lpthread -Wl,--no-whole-archive

遗憾的是,p线程覆盖了我的资源信息,windows-explorer现在为我的.exe可执行文件显示了如下内容:

代码语言:javascript
复制
description:   POSIX WinThreads for Windows
original name: WinPthreadGC
[...]

如果没有p线程的链接选项,windows-explorer提供给我的信息与我的资源文件中的相同,但是我的可执行文件依赖于libwinp线程-1.dll。

我从链接器中得到的唯一提示是:

代码语言:javascript
复制
.../bin/ld.exe: .rsrc merge failure: duplicate leaf: type: 10 (VERSION) name: 1 lang: 409

这似乎是合理的,因为版本和lang在我的资源文件中是不同的,我想从p线程中去掉这些东西。

我是否可以用我的资源文件来替换p线程信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-12 10:57:22

这似乎是包含所有存档(--whole-archive)的一个缺点:

-Wl,-Bstatic,--whole-archive -lpthread -Wl,--no-whole-archive

(在libpthread.a中,有一个包含已编译的VERSIONINFO资源的version.o )

但是,包含整个存档对于静态链接libpthread.a (即不依赖于DLL)非常有用。

我所做的就是将-Wl,-Bstatic,--whole-archive -lpthread -Wl,--no-whole-archive作为链接命令的最后一个参数:

gcc <files> -Wl,--whole-archive -lpthread -Wl,--no-whole-archive

而不是:

gcc -Wl,--whole-archive -lpthread -Wl,--no-whole-archive <files>

(使用<files>中已编译的资源文件)

然后我仍然有消息.rsrc merge failure: duplicate leaf,但是链接执行正常,可执行文件有正确的版本信息,即在命令行提供的第一个版本。

另一种选择是通过复制libpthread.a创建另一个库,并从归档(ar -d libmypthread.a version.o)中删除version.o,并与此存档链接。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63013037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档