[英]Where can i find library "version.lib" in order to successfully call GetFileVersionInfoSize()?
我正在DevC++上開發一個使用MinGW64的項目。 在 Windows 7 上(我不知道這是否與我的問題有關)。
我在編譯C++程序時遇到問題,我在其中調用函數GetFileVersionInfoSize()
,它是:
main.cpp:(.text+0x51):對`GetFileVersionInfoSizeA'的未定義引用
經過兩天的研究,我了解到我必須在鏈接器的參數中包含我計算機中缺少的“version.lib”文件,我到處搜索。 我什至在網上找不到下載鏡像,所以我問,有人知道我在哪里可以找到 version.lib 嗎? 也許隱藏在我的電腦或網絡中的某個地方? 也許新安裝了 MinGW64? 我不知道,因為我安裝的 MinGW64 是隨 DevC++ 一起提供的。
謝謝閱讀。
由於它是為GCC構建的環境,庫名稱將遵循Nix約定:
通常,它應該駐留在${MINGW_INSTALL_DIR} /x86_64-w64-mingw32/lib/libversion.a 中。
一個安裝示例是: f:\\Install\\Qt\\Qt\\Tools\\mingw730_64\\x86_64-w64-mingw32\\lib\\libversion.a 。
[MinGW]:HOWTO 指定與 MinGW 一起使用的庫的位置也可能有用。
但是因為它是一個系統庫,你不應該關心它的路徑, MinGW應該自動找到它,你所要做的就是將它傳遞給鏈接器(使用標准方式)。
謝謝大家給我的建議
在這個答案中有如何在這種情況下找到Version.lib 。
下面是關於完成使用GetFileVersionInfoSize()
、 GetFileVersionInfo()
和VerQueryValue()
來獲取可執行文件的產品名稱,這就是為什么我需要Version.lib ,實際上在我的機器上被稱為libversion.a 。
最后編輯:我設法實現了我想要的,這是適用於我的情況的代碼:
// filename contains the path of the .exe we want to get Product Name
int version_info_size = GetFileVersionInfoSize(filename, NULL);
if(version_info_size > 0) {
BYTE *version_info_buffer = new BYTE[version_info_size];
if(GetFileVersionInfo(filename, 0, version_info_size, version_info_buffer)) {
char *product_name = NULL;
UINT pLenFileInfo = 0;
if(VerQueryValue(version_info_buffer, TEXT("\\StringFileInfo\\040904e4\\ProductName"),
(LPVOID*)&product_name, &pLenFileInfo)) cout << product_name;
}
}
請注意,如果要將product_name
與另一個值進行比較,則必須執行類似string product_name_str = product_name
並比較該字符串變量,否則比較將始終返回false 。 或者也許只是做(string)product_name
,我應該嘗試。
040904e4
是我執行此操作所需的 lang-code 十六進制翻譯,由於此答案中的代碼,我找到了它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.