簡體   English   中英

Static 庫未正確鏈接

[英]Static library not linking correctly

很抱歉打擾你。

我知道這是一個常見問題,再次提出這可能很煩人,但我完全陷入困境並且不確定我做錯了什么。

我正在關注 learnopengl.com 並嘗試將 assimp 添加到我的 CLion 項目中。

我快速創建了一個新項目,所以我知道沒有任何干擾。

我的 C 驅動器上有一個文件夾,我將其放置在 assimp 庫中。

我按照https://github.com/assimp/assimp/blob/master/Build.md和 git 下載它並執行

cd assimp
cmake CMakeLists.txt

但將BUILD_SHARED_LIBS更改為 OFF

然后我使用“Release x64”和“Visual Studio 2022 (v143)”工具集使用 Visual Studio 2022 構建庫

我使用 CMake 鏈接到庫,如下所示。 我沒有收到錯誤消息,所以我知道 CMake 找到了庫。 我在 PATH 中也有庫設置的位置。

cmake_minimum_required(VERSION 3.22)
project(lemmefixbroken)

set(CMAKE_CXX_STANDARD 20)
set(LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")

add_executable(lemmefixbroken main.cpp)

# assimp
include_directories("C:/dev/libraries/assimp/include")
find_library(ASSIMP_LOCATION NAMES "assimp-vc143-mt" REQUIRED)
message(${ASSIMP_LOCATION})
target_link_libraries(${PROJECT_NAME} "${ASSIMP_LOCATION}")

我的編譯器設置如下:(使用位於 Visual Studio 2022 中的編譯器並使用架構 amd64)我嘗試了所有不同的架構,但都沒有工作。 消息返回“C:/dev/libraries/assimp/lib/Release/assimp-vc143-mt.lib”,這是它所在的位置

我的代碼是:

#include <iostream>
#include "assimp/Importer.hpp"

int main()
{
    std::cout << "Hello, World!" << std::endl;
    Assimp::Importer import;
    
    return 0;
}

當我構建代碼時,我收到此錯誤:

"C:\Program Files\JetBrains\CLion 2022.1.1\bin\cmake\win\bin\cmake.exe" --build C:\Users\charl\CLionProjects\lemmefixbroken\cmake-build-release --target all -j 9
[1/2] Building CXX object CMakeFiles\lemmefixbroken.dir\main.cpp.obj
[2/2] Linking CXX executable lemmefixbroken.exe
FAILED: lemmefixbroken.exe 
cmd.exe /C "cd . && "C:\Program Files\JetBrains\CLion 2022.1.1\bin\cmake\win\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\lemmefixbroken.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100190~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100190~1.0\x64\mt.exe --manifests  -- C:\PROGRA~1\MICROS~2\2022\COMMUN~1\VC\Tools\MSVC\1433~1.316\bin\Hostx64\x64\link.exe /nologo CMakeFiles\lemmefixbroken.dir\main.cpp.obj  /out:lemmefixbroken.exe /implib:lemmefixbroken.lib /pdb:lemmefixbroken.pdb /version:0.0 /machine:x64 /INCREMENTAL:NO /subsystem:console  C:\dev\libraries\assimp\lib\Release\assimp-vc143-mt.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
LINK: command "C:\PROGRA~1\MICROS~2\2022\COMMUN~1\VC\Tools\MSVC\1433~1.316\bin\Hostx64\x64\link.exe /nologo CMakeFiles\lemmefixbroken.dir\main.cpp.obj /out:lemmefixbroken.exe /implib:lemmefixbroken.lib /pdb:lemmefixbroken.pdb /version:0.0 /machine:x64 /INCREMENTAL:NO /subsystem:console C:\dev\libraries\assimp\lib\Release\assimp-vc143-mt.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:lemmefixbroken.exe.manifest" failed (exit code 1120) with the following output:
assimp-vc143-mt.lib(AssbinLoader.obj) : error LNK2019: unresolved external symbol uncompress referenced in function "public: virtual void __cdecl Assimp::AssbinImporter::InternReadFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,struct aiScene *,class Assimp::IOSystem *)" (?InternReadFile@AssbinImporter@Assimp@@UEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAUaiScene@@PEAVIOSystem@2@@Z)
assimp-vc143-mt.lib(Compression.obj) : error LNK2019: unresolved external symbol inflate referenced in function "public: unsigned __int64 __cdecl Assimp::Compression::decompress(void const *,unsigned __int64,class std::vector<char,class std::allocator<char> > &)" (?decompress@Compression@Assimp@@QEAA_KPEBX_KAEAV?$vector@DV?$allocator@D@std@@@std@@@Z)
assimp-vc143-mt.lib(unzip.obj) : error LNK2001: unresolved external symbol inflate
assimp-vc143-mt.lib(Compression.obj) : error LNK2019: unresolved external symbol inflateEnd referenced in function "public: bool __cdecl Assimp::Compression::close(void)" (?close@Compression@Assimp@@QEAA_NXZ)
assimp-vc143-mt.lib(unzip.obj) : error LNK2001: unresolved external symbol inflateEnd
assimp-vc143-mt.lib(Compression.obj) : error LNK2019: unresolved external symbol inflateSetDictionary referenced in function "public: unsigned __int64 __cdecl Assimp::Compression::decompressBlock(void const *,unsigned __int64,char *,unsigned __int64)" (?decompressBlock@Compression@Assimp@@QEAA_KPEBX_KPEAD1@Z)
assimp-vc143-mt.lib(Compression.obj) : error LNK2019: unresolved external symbol inflateReset referenced in function "public: unsigned __int64 __cdecl Assimp::Compression::decompressBlock(void const *,unsigned __int64,char *,unsigned __int64)" (?decompressBlock@Compression@Assimp@@QEAA_KPEBX_KPEAD1@Z)
assimp-vc143-mt.lib(Compression.obj) : error LNK2019: unresolved external symbol inflateInit_ referenced in function "public: bool __cdecl Assimp::Compression::open(enum Assimp::Compression::Format,enum Assimp::Compression::FlushMode,int)" (?open@Compression@Assimp@@QEAA_NW4Format@12@W4FlushMode@12@H@Z)
assimp-vc143-mt.lib(Compression.obj) : error LNK2019: unresolved external symbol inflateInit2_ referenced in function "public: bool __cdecl Assimp::Compression::open(enum Assimp::Compression::Format,enum Assimp::Compression::FlushMode,int)" (?open@Compression@Assimp@@QEAA_NW4Format@12@W4FlushMode@12@H@Z)
assimp-vc143-mt.lib(unzip.obj) : error LNK2001: unresolved external symbol inflateInit2_
assimp-vc143-mt.lib(unzip.obj) : error LNK2019: unresolved external symbol crc32 referenced in function unzReadCurrentFile
assimp-vc143-mt.lib(unzip.obj) : error LNK2019: unresolved external symbol get_crc_table referenced in function unzOpenCurrentFile3
lemmefixbroken.exe : fatal error LNK1120: 9 unresolved externals
ninja: build stopped: subcommand failed.

我嘗試編譯庫的次數比我想的要多。 我試過使用 2019 編譯器,但什么也沒用。 我仍然得到所有相同的錯誤。 我不知道我做錯了什么,但希望這里有人會知道。 我也嘗試過使用共享庫但沒有成功。 我已更新 Visual Studio 2022 並重新啟動計算機,然后再次編譯,但仍然沒有任何變化。

這些都是缺少的 zlib 符號,這意味着您沒有鏈接到它。 Asset-Importer 列出了幾個依賴項:

  • zlib
  • 壓縮庫
  • 解壓
  • pugi-xml
  • rapijson
  • 快船
  • 德拉科
  • 測試
  • stb_image
  • utf8cpp
  • poly2tri
  • 打開ddlparser

由於 Findassimp.cmake 使用舊的基於路徑的接口,而不是定義可以具有PUBLIC依賴項的虛擬目標的新樣式,因此您需要自己鏈接這些對象。 它們都在庫的源代碼樹中,但從未使用過該庫,我不知道它們是否是作為其構建腳本的一部分構建的,如果您需要自己這樣做。

正如您在錯誤消息中看到的,失敗的是鏈接過程,而不是編譯過程。

我認為您的 linker 找不到 assimp 庫的“.lib”文件。

您是否在項目設置中指定了 assimp 庫的“.lib”文件的路徑?

您可以在“VC++ 目錄”或“鏈接器/輸入”中執行此操作,但我不確定,因為我目前沒有使用我的計算機。

暫無
暫無

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

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