Visual studio 没有找到 spdlog.lib
Visual studio not finding spdlog.lib
我一直在尝试创建一个简单的项目来了解 Windows 上的构建过程。
最近下载并安装了spdlog库,安装文件夹位于
C:\Program Files (x86)\spdlog
具有以下目录:
- bin: 里面有spdlog.dll;
- 包括:所有 headers 关于 spdlog;
- lib:有两个 子目录 - cmake 和 pkgconfig - 和 spdlog.lib.
我尝试 link spdlog.dll 对我的代码使用 cmake,但根据此 link,dll 文件未 linked,合适的程序是link 使用 .lib 文件。
嗯,根据最后的信息,我创建了以下 CMakeLists.txt。
cmake_minimum_required (VERSION 3.8)
set(APPNAME DrumHero)
project($APPNAME)
#C++ version
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(SOURCES src/drumhero.cpp)
set(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/drumhero.h)
set(DEPENDENCIES_LIBS spdlog)
link_directories("C:/Program Files (x86)/spdlog/lib")
include_directories("C:/Program Files (x86)/spdlog/include")
add_executable (${APPNAME} ${SOURCES} ${HEADERS})
target_link_libraries(${APPNAME}
PUBLIC ${DEPENDENCIES_LIBS})
set_target_properties(${APPNAME} PROPERTIES
PUBLIC_HEADER "${HEADERS}")
当我尝试构建它时 Visual studio returns 错误
LNK 1104: 无法打开文件 'spdlog.lib'.
我得出结论,我的主要错误与通知cmake文件在哪里有关'spdlog.lib',但我不知道具体错误在哪里。
我有 3 个问题:
- 主要问题:如何使用 spdlog 将 CMakeLists.txt 更正为 link?
- 附带问题 1:.lib 类似于 .a,.dll 类似于 .so?
- 附带问题 2:我不能 link 我的代码到 .dll 文件吗?
更新 1
我已经尝试过对 spdlog 路径中的空格进行转义,但没有成功。
更新 2
一些评论提出我可能将 x64 与 x86 混合使用的可能性,因此我决定重新安装 spdlog,现在将体系结构更改为 x64。
第二次安装是在 Program Files 中,所以我相信这次我使用了合适的路径库:“C:/Program Files /spdlog/include”.
但问题依旧。
您的构建失败,因为您在包含空格的路径中安装了 spdlog
。尝试转义空格:
link_directories("C:/Program\ Files\ (x86)/spdlog/lib")
就链接而言,在 Windows 上,dll
个文件是动态库,而 lib
个文件是静态库。
在 Windows 上有两种使用(链接)动态库的方法:隐式和显式。两者都有记录 here。如果您将 spdlog
构建为 DLL,您看到的 spdlog.lib
只是一个导入库,并且 OS 将在您的应用程序启动时加载 spdlog.dll
(如果它可以找到 DLL) .
编辑:事实证明 spdlog
的调试版本创建了一个 spdlogd.lib
(注意额外的 d
)。问题的作者已经安装了库的调试版本。
我一直在尝试创建一个简单的项目来了解 Windows 上的构建过程。 最近下载并安装了spdlog库,安装文件夹位于
C:\Program Files (x86)\spdlog
具有以下目录:
- bin: 里面有spdlog.dll;
- 包括:所有 headers 关于 spdlog;
- lib:有两个 子目录 - cmake 和 pkgconfig - 和 spdlog.lib.
我尝试 link spdlog.dll 对我的代码使用 cmake,但根据此 link,dll 文件未 linked,合适的程序是link 使用 .lib 文件。
嗯,根据最后的信息,我创建了以下 CMakeLists.txt。
cmake_minimum_required (VERSION 3.8)
set(APPNAME DrumHero)
project($APPNAME)
#C++ version
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(SOURCES src/drumhero.cpp)
set(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/drumhero.h)
set(DEPENDENCIES_LIBS spdlog)
link_directories("C:/Program Files (x86)/spdlog/lib")
include_directories("C:/Program Files (x86)/spdlog/include")
add_executable (${APPNAME} ${SOURCES} ${HEADERS})
target_link_libraries(${APPNAME}
PUBLIC ${DEPENDENCIES_LIBS})
set_target_properties(${APPNAME} PROPERTIES
PUBLIC_HEADER "${HEADERS}")
当我尝试构建它时 Visual studio returns 错误
LNK 1104: 无法打开文件 'spdlog.lib'.
我得出结论,我的主要错误与通知cmake文件在哪里有关'spdlog.lib',但我不知道具体错误在哪里。
我有 3 个问题:
- 主要问题:如何使用 spdlog 将 CMakeLists.txt 更正为 link?
- 附带问题 1:.lib 类似于 .a,.dll 类似于 .so?
- 附带问题 2:我不能 link 我的代码到 .dll 文件吗?
更新 1
我已经尝试过对 spdlog 路径中的空格进行转义,但没有成功。
更新 2
一些评论提出我可能将 x64 与 x86 混合使用的可能性,因此我决定重新安装 spdlog,现在将体系结构更改为 x64。 第二次安装是在 Program Files 中,所以我相信这次我使用了合适的路径库:“C:/Program Files /spdlog/include”.
但问题依旧。
您的构建失败,因为您在包含空格的路径中安装了 spdlog
。尝试转义空格:
link_directories("C:/Program\ Files\ (x86)/spdlog/lib")
就链接而言,在 Windows 上,dll
个文件是动态库,而 lib
个文件是静态库。
在 Windows 上有两种使用(链接)动态库的方法:隐式和显式。两者都有记录 here。如果您将 spdlog
构建为 DLL,您看到的 spdlog.lib
只是一个导入库,并且 OS 将在您的应用程序启动时加载 spdlog.dll
(如果它可以找到 DLL) .
编辑:事实证明 spdlog
的调试版本创建了一个 spdlogd.lib
(注意额外的 d
)。问题的作者已经安装了库的调试版本。