【问题标题】:dlib static lib error in debug mode调试模式下的 dlib 静态库错误
【发布时间】:2017-04-20 20:24:06
【问题描述】:

我目前正在为一个项目尝试 dlib 19.1

我使用 cmake 构建所有示例,并且我还使用 VS 2013 构建 dlib 以获得静态库。所以我有我的安装文件夹,其中创建了 dlib。我使用与 cmake 创建的相同 .sln 在 Release 和 Debug 中进行编译。所以到现在为止,没问题。

接下来,我进入了我的项目(一个控制台项目),我指向了 header 和 lib(发布和调试)。请注意,该项目仅包含一个 Main.cpp,它调用与我自己的其他项目库不同的函数,并且该 main 还从 dlib 调用面部标志检测。

所以,我可以使用我创建的 dlib.lib 在 Release 中编译我的项目。但是当使用 debug dlib.lib 并尝试在调试模式下启动我自己的项目时,我收到以下错误:

错误 LNK2001:无法解析的外部符号 _USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives_

有什么做错了吗?当我在调试中查看 cmake .sln 中的预处理器时,我有 _DEBUG 以及我自己的项目。

【问题讨论】:

    标签: c++ debugging dlib


    【解决方案1】:

    可能的解决方案是不从 .sln 文件构建 dlib,而是直接通过 cmake:

    mkdir build
    cd build
    cmake .. -G"Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX=c:\prj\dlib_build_release
    cmake --build . --target install --config Release
    cmake .. -G"Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX=c:\prj\dlib_build_debug
    cmake --build . --target install --config Debug
    

    这会将 dlib 二进制文件和头文件编译并安装到 c:\prj\dlib_build_release 和 c:\prj\dlib_build_debug 目录中 之后,您可以使用此目录中的 dlib 编译库

    【讨论】:

    • 这个想法很好,可以尝试一下。我刚刚完成,结果相同。该项目仍然输出相同的错误。
    • 我注意到我的 ENABLE_ASSERTS 默认没有被选中(如这里所说:dlib.net/compile.html。但问题只是为了调试构建而激活它。我通过检查 GUI 中的所有参数注意到它注意,我使用的是 dlib 19.1 而不是 19.4,这可能在文档之间存在差异(我不知道)。
    • 还有其他错误吗?可能是因为 x64/x86 不兼容而未链接库?
    • 问题立即解决。问题是我直接通过控制台(cmake ..)进行配置,从未使用过 GUI。所以我理所当然地认为默认配置很好。但是当我使用 cmake GUI 打开时,它看起来好像 ENABLE_ASSERT 没有被检查,所以我不得不标记它,我也按照你的建议直接通过 cmake 而不是打开生成的 .sln。所以我现在有一个可以调试和发布的工作解决方案。
    • 谢谢。我遇到了完全相同的问题,你的解决方案就像一个魅力。
    猜你喜欢
    • 2016-04-08
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多