簡體   English   中英

MinGW:winpthreads overrides.rc 資源文件信息

[英]MinGW: winpthreads overrides .rc resource file information

我的 MinGW 項目使用 boost 庫和間接 pthreads。
我為我的項目創建了一個.rc資源文件,其中包含版本信息等。
到 static 鏈接我的可執行文件,我使用參數:
-static-libgcc -static-libstdc++ -Wl,-Bstatic,--whole-archive -lpthread -Wl,--no-whole-archive

可悲的是,pthread 覆蓋了我的資源信息,windows-explorer 現在為我的.exe可執行文件顯示了這個:

description:   POSIX WinThreads for Windows
original name: WinPthreadGC
[...]

如果沒有 pthread 的鏈接選項,windows-explorer 給我的信息與我的資源文件中的信息相同,但我的可執行文件取決於libwinpthread-1.dll
我從 linker 得到的唯一提示是:

.../bin/ld.exe: .rsrc merge failure: duplicate leaf: type: 10 (VERSION) name: 1 lang: 409

這似乎是合理的,因為VERSIONlang在我的資源文件中是不同的,我想從 pthread 中刪除這些東西。

有什么方法可以用我的資源文件替換 pthread 信息嗎?

這似乎是包含所有存檔( --whole-archive )的一個缺點:
-Wl,-Bstatic,--whole-archive -lpthread -Wl,--no-whole-archive

(在libpthread.a中,有一個version.o包含已編譯的VERSIONINFO資源)

但是包括整個存檔對於靜態鏈接libpthread.a很有用(即不依賴於 DLL)。

我所做的是將-Wl,-Bstatic,--whole-archive -lpthread -Wl,--no-whole-archive作為鏈接命令的最后一個 arguments :

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創建另一個庫,並從存檔中刪除version.o ( ar -d libmypthread.a version.o ),並與此存檔鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM