簡體   English   中英

qInitResources() 上的 Qt 鏈接器錯誤 LNK2019 - RCC

[英]Qt linker error LNK2019 on qInitResources() - RCC

我想在 Visual Studio 2010 中使用 Qt 編譯一個項目。我已經構建了所有必備庫並將它們鏈接到項目屬性中。

我還使用以下命令從 project.qrc 文件 (rcc) 制作了 .cpp 文件:

rcc project.qrc -name project -o qrc_project.cpp

按照http://www.qtcentre.org/archive/index.php/t-3425.html的說明進行操作。

project.coo 文件由以下幾行生成:

    int QT_MANGLE_NAMESPACE(qInitResources_project)()
    {
        QT_PREPEND_NAMESPACE(qRegisterResourceData)
            (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
        return 1;
    }
    
    Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_project))

我還在項目中包含了 .cpp 文件。 雖然,我收到以下錯誤:

> Error 2611    error LNK2019: unresolved external symbol "int __cdecl
> qInitResources_project(void)" (?qInitResources_project@@YAHXZ)
> referenced in function main   D:\usr\Windows\main.obj project

我對 rcc 做錯了嗎? 有人可以幫忙嗎?

我通過生成一個 .rcc 文件和一個 .cpp 文件解決了我的問題,兩者都帶有項目的名稱,而不是開頭的“qrc_”。 我還在我的項目中鏈接了這兩個文件。

編譯器似乎找不到正確的文件,這就是我遇到鏈接錯誤的原因。

我用來生成上述文件的命令是:

  1. rcc -binary <path_to_qrc_file>.qrc -o <path_and_filename>.rcc

  2. rcc <path_to_qrc_file>.qrc -name <project_name> -o <path_and_filename>.cpp

對於使用CMake的人:

您應該啟用AUTORCC來自動編譯*.qrc文件。

add_executable(project project.cpp project.qrc)

// enable autorcc and automoc
set_target_properties(project PROPERTIES AUTOMOC TRUE)
set_target_properties(project PROPERTIES AUTORCC TRUE)

如果 SO 上的任何內容都不適合您,我找到了一個非常簡單的解決方法:

在 VS 中,您可以簡單地將資源(圖像或圖標)不放在庫 qrc 文件中,而是直接放在主項目 qrc 文件中。 然后,在庫項目中,您可以使用主項目中的路徑來引用圖像,甚至不需要調用QT_INIT_RESOURCE。

我認為這不是一個好的做法,但請記下在線嘗試所有解決方案但仍無法正常工作的人。

如果您的 project.qrc 文件與 main 在同一個項目中並且 main 不在命名空間中,只需添加Q_INIT_RESOURCE(project); 在你的主要。

否則,僅Q_INIT_RESOURCE(project); 在庫中的任何命名空間之外,您都擁有 project.qrc 文件。 在 main 中調用該函數。

暫無
暫無

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

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