久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

錯誤 LNK1104:無法打開文件“DebugMyProjectLib.lib&quo

Error LNK1104: cannot open file #39;DebugMyProjectLib.lib#39;(錯誤 LNK1104:無法打開文件“DebugMyProjectLib.lib)
本文介紹了錯誤 LNK1104:無法打開文件“DebugMyProjectLib.lib"的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有以下 CMakeLists.txt 文件來基于 Qt 生成我的項目:

I have the following CMakeLists.txt file to generate my project based on Qt:

cmake_minimum_required(VERSION 2.8.12)
project(MyProject)

find_package(Qt5Widgets)

set(MyProjectLib_src ${PROJECT_SOURCE_DIR}/gui.cpp)
set(MyProjectLib_hdr ${PROJECT_SOURCE_DIR}/gui.h)
set(MyProjectLib_ui  ${PROJECT_SOURCE_DIR}/gui.ui)
set(MyProjectBin_src ${PROJECT_SOURCE_DIR}/main.cpp)

qt5_wrap_cpp(MyProjectLib_hdr_moc ${MyProjectLib_hdr})
qt5_wrap_ui (MyProjectLib_ui_moc  ${MyProjectLib_ui})

include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_BINARY_DIR})

add_library(MyProjectLib SHARED 
    ${MyProjectLib_src}
    ${MyProjectLib_hdr_moc}
    ${MyProjectLib_ui_moc}
)
target_link_libraries(MyProjectLib Qt5::Widgets)

add_executable(MyProject ${MyProjectBin_src})
target_link_libraries(MyProject MyProjectLib)

當我嘗試編譯生成的項目時,出現以下錯誤:

When I try to compile the generated project, I got the following error:

錯誤 LNK1104:無法打開文件 'DebugMyProjectLib.lib'

error LNK1104: cannot open file 'DebugMyProjectLib.lib'

對應目錄Debug包含:

MyPtojectLib.dll
MyProjectLib.ilk
MyProjectLib.pdb

推薦答案

您將 MyProjectLib 聲明為共享庫,因此除非您導出庫的全部或部分符號,否則您將只擁有一個 .dll 設計為在運行時加載,沒有 .lib 可以在編譯時鏈接,就像你試圖做的那樣.

You declared MyProjectLib as a shared library, so unless you exported all or part of the symbols of the library, you will only have a .dll designed to be loaded at runtime, and no .lib to link against at compile time as you're trying to do.

一個快速的解決方案可能是將 MyProjectLib 聲明為靜態庫:

A quick solution may be to declare MyProjectLib as a static library:

add_library(MyProjectLib STATIC ...)

另一種選擇是使用新的"cmake 功能來導出所有符號(參見 這篇文章):

Another option could be to use "new" cmake features to export all symbols (see this article):

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

您還可以通過顯式聲明要導出的符號來使用傳統"方式,如這個答案(長答案).您首先需要在代碼中的某處聲明一些 API 宏:

You can also use the "traditional" way by explicitly declaring the symbols to be exported, like in this answer (the long answer). You will first need to declare some API macro somewhere in your code:

#ifdef MyProjectLib_EXPORTS
#define MyProjectLib_API __declspec(dllexport)
#else
#define MyProjectLib_API __declspec(dllimport)
#endif

注意 MyProjectLib_EXPORTS 是由 cmake 為共享庫自動生成的:你不需要關心這個.然后對于代碼中的每個類,在聲明中使用宏:

Note that MyProjectLib_EXPORTS is automatically generated by cmake for shared libraries: you don't need to care about this. Then for each of your class in your code, use the macro in the declaration:

class MyProjectLib_API MyClass { /* ... */ };

MyClass 在編譯MyProjectLib 時會是一個導出符號,因為MyProjectLib_EXPORTS 會被定義,而MyProjectLib_API 會擴展為__declspec(dllexport).所以它會被導出到一個 .lib 文件中.

MyClass will be an exported symbol when compiling MyProjectLib because MyProjectLib_EXPORTS will be defined, and MyProjectLib_API will expand to __declspec(dllexport). So it will be exported in a .lib file.

當鏈接到 MyProjectLib 時,它將是一個導入符號,因為 MyProjectLib_EXPORTS 將是未定義的,并且 MyProjectLib_API 將擴展為 __declspec(dllimport).

It will be an imported symbol when linking against MyProjectLib because MyProjectLib_EXPORTS will be undefined, and MyProjectLib_API will expand to __declspec(dllimport).

您也可以像這樣改進您的 cmake 文件:

You may also improve your cmake file like this:

qt5_wrap_cpp(MyProjectLib_hdr_moc ${MyProjectLib_hdr})
qt5_wrap_ui (MyProjectLib_ui_moc  ${MyProjectLib_ui})

您可以使用 AUTOMOCAUTOUIC 代替讓 cmake 自動處理對 Qt 實用程序的調用.

You may use AUTOMOC and AUTOUIC instead to let cmake automatically handle the call to Qt's utilities.

include_directories (${PROJECT_SOURCE_DIR})
include_directories (${PROJECT_BINARY_DIR})

PROJECT_SOURCE_DIR 默認是一個包含目錄,我不明白你為什么需要在這里添加 PROJECT_BINARY_DIR :只需刪除這些行.

PROJECT_SOURCE_DIR is an include directory by default, and I can't see why you need to add PROJECT_BINARY_DIR here: just remove these lines.

清理后,您的 cmake 文件可能會變成這樣:

Once cleaned, your cmake file may become something like this:

cmake_minimum_required(VERSION 2.8.12)
project(MyProject)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt5Widgets)

set(MyProjectLib_src
    ${PROJECT_SOURCE_DIR}/gui.cpp
    ${PROJECT_SOURCE_DIR}/gui.h
    ${PROJECT_SOURCE_DIR}/gui.ui
)

add_library(MyProjectLib STATIC
    ${MyProjectLib_src}
)
target_link_libraries(MyProjectLib Qt5::Widgets)

set(MyProjectBin_src ${PROJECT_SOURCE_DIR}/main.cpp)

add_executable(MyProject
    ${MyProjectBin_src}
)
target_link_libraries (MyProject MyProjectLib)

這篇關于錯誤 LNK1104:無法打開文件“DebugMyProjectLib.lib"的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How can I read and manipulate CSV file data in C++?(如何在 C++ 中讀取和操作 CSV 文件數據?)
In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,為什么我不能像這樣編寫 for() 循環: for( int i = 1, double i2 = 0;)
How does OpenMP handle nested loops?(OpenMP 如何處理嵌套循環?)
Reusing thread in loop c++(在循環 C++ 中重用線程)
Precise thread sleep needed. Max 1ms error(需要精確的線程睡眠.最大 1ms 誤差)
Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?環形?)
主站蜘蛛池模板: 欧美日韩国产免费 | 成人国产免费视频 | h视频在线免费 | 欧美在线一区二区三区 | 免费一区 | 国产在线不卡 | 亚洲一二三区精品 | 国产一区影院 | 国产精品九九九 | 久久国产精品免费一区二区三区 | 欧美激情一区二区 | 麻豆av电影网 | 亚洲精品国产综合区久久久久久久 | 欧美激情综合色综合啪啪五月 | 91久久爽久久爽爽久久片 | 777777777亚洲妇女 | 欧美精品被 | 国产高清自拍视频在线观看 | www久久 | 很很干很很日 | 色吧久久 | 午夜视频一区二区 | 国产视频中文字幕 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 久久av一区二区三区 | 久久精品网 | 精品久久久久国产免费第一页 | 涩爱av一区二区三区 | 日韩在线高清 | 日日夜夜天天 | 麻豆久久久久久久 | 99久久久无码国产精品 | 免费看的黄网站 | 午夜在线观看免费 | 日日想夜夜操 | 91精品午夜窝窝看片 | www.99re| 国产黄色在线 | 日韩国产一区二区三区 | 国产精品一区二区久久 | 亚洲精品日本 |