繁体   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