VS下配置dlib库的方法请查看下面这篇文章

https://blog.csdn.net/qq_34013247/article/details/124612321

现在我们在clion上操作。

配置条件:win11,clion c++,工具链msvc,dlib,opencv

dlib还依赖opencv库,请下载好,解压。

cmakelists.txt设置如下:

cmake_minimum_required(VERSION 3.28)
project(DlibOpenCVTest)

# 设置C++标准
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 添加 /bigobj 编译选项
if(MSVC)
    add_compile_options(/bigobj)
endif()

# 查找 OpenCV 包
find_package(OpenCV REQUIRED PATHS "G:/software/opencv411/opencv/build")

# 设置 dlib 路径
set(DLIB_ROOT "H:/software/Dlib200")
set(DLIB_INCLUDE_DIRS "${DLIB_ROOT}")

# 包含头文件目录
include_directories(
        ${OpenCV_INCLUDE_DIRS}
        ${DLIB_INCLUDE_DIRS}
)

# 添加可执行文件(只包含 main.cpp)
add_executable(test main.cpp)


target_sources(test PRIVATE
        "${DLIB_ROOT}/dlib/all/source.cpp"  )

# 链接库
target_link_libraries(test ${OpenCV_LIBS})

# 对于 dlib,需要链接一些系统库
if(UNIX AND NOT APPLE)
    target_link_libraries(test pthread)
elseif(WIN32)
    target_link_libraries(test ws2_32 winmm)
endif()

# 设置调试和发布版本的配置
set_target_properties(test PROPERTIES
        DEBUG_POSTFIX "d"
        RELEASE_POSTFIX ""
)

测试代码:

#include <dlib/matrix.h>
#include <iostream>

using namespace dlib;
using namespace std;

int main() {
    cout << "=== 测试编译好的dlib库 ===" << endl;

    // 创建矩阵
    matrix<double> A(3, 3);
    A = 1, 2, 3,
            4, 5, 6,
            7, 8, 10;

    cout << "矩阵 A:\n" << A << endl;

    // 测试需要LAPACK的功能
    matrix<double> A_inv = inv(A);
    cout << "A 的逆矩阵:\n" << A_inv << endl;

    // 验证
    matrix<double> identity = A * A_inv;
    cout << "A * A_inv (应该接近单位矩阵):\n" << identity << endl;

    cout << "? dlib 库使用成功!" << endl;

#if defined(_DLL)  //当 defined(_DLL) 为真时,您的程序确实是使用动态运行时库编译的。
    #ifdef _DEBUG
    std::cout << "运行时库: 动态调试版本 (MDd) (嵌套的代码形式)" << std::endl;
    #else
    std::cout << "运行时库: 动态发布版本 (MD)(嵌套的代码形式)" << std::endl;
#endif
    std::cout << "说明: 程序依赖于外部的 MSVCRT DLL(嵌套的代码形式)\n" << std::endl;
   #else
    #ifdef _DEBUG
        std::cout << "\n运行时库: 静态调试版本 (MTd)(嵌套的代码形式)" << std::endl;
    #else
        std::cout << "运行时库: 静态发布版本 (MT)(嵌套的代码形式)" << std::endl;
    #endif
    std::cout << "说明: 运行时库已静态链接到程序中(嵌套的代码形式)\n" << std::endl;
   #endif

    return 0;
}

运行结果:

=== 测试编译好的dlib库 ===
矩阵 A:
 1  2  3 
 4  5  6 
 7  8 10 

A 的逆矩阵:
-0.666667  -1.33333         1 
-0.666667   3.66667        -2 
        1        -2         1 

A * A_inv (应该接近单位矩阵):
          1           0           0 
          0           1 8.88178e-16 
          0           0           1 

? dlib 库使用成功!
运行时库: 动态发布版本 (MD)(嵌套的代码形式)
说明: 程序依赖于外部的 MSVCRT DLL(嵌套的代码形式)


Process finished with exit code 0

这个表示程序代码能正常运行。不过有个小小瑕疵,就是目录结构有点不好看,那个all文件夹显示出来

更多推荐