[英]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
這似乎是合理的,因為VERSION和lang在我的資源文件中是不同的,我想從 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.