【问题标题】:Linking error when building OpenCV 3.0 with CMake and NMake使用 CMake 和 NMake 构建 OpenCV 3.0 时出现链接错误
【发布时间】:2015-12-07 21:19:10
【问题描述】:

尝试使用 CMake 和 NMake 构建 OpenCV 3.0:

cmake -DCMAKE_BUILD_TYPE=release -G "NMake Makefiles" -DBUILD_SHARED_LIBS=OFF -DBUILD_opencv_java=OFF -DWITH_MSMF=OFF -DWITH_DSHOW=OFF -DWITH_VFW=OFF DWITH_OPENEXR=OFF -DWITH_CUDA=OFF ..

nmake

我明白了

...
-- Configuring done
-- Generating done
-- Build files have been written to: W:/VSONLINE/Passport-Photo/thirdparty/openc
v-3.0.0/build
nmake

Microsoft (R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

Scanning dependencies of target zlib
[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/adler32.c.obj
adler32.c
[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/compress.c.obj
compress.c
[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/crc32.c.obj
crc32.c
[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/deflate.c.obj
deflate.c
[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/gzclose.c.obj
gzclose.c
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/gzlib.c.obj
gzlib.c
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/gzread.c.obj
gzread.c
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/gzwrite.c.obj
gzwrite.c
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/inflate.c.obj
inflate.c
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/infback.c.obj
infback.c
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/inftrees.c.obj
inftrees.c
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/inffast.c.obj
inffast.c
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/trees.c.obj
trees.c
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/uncompr.c.obj
uncompr.c
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/zutil.c.obj
zutil.c
[  2%] Linking C static library ..\lib\zlib.lib
The system cannot find the path specified.
NMAKE : fatal error U1077: 'cd' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 12.0
\VC\BIN\nmake.exe"' : return code '0x2'

知道我做错了什么吗?我尝试过使用 Visual Studio 2010 和 2013,结果完全相同。

更新 如果我将生成器更改为“Visual Studio 10 2010”或任何其他版本的 Visual Studio,然后使用msbuild.exe OpenCV.sln 进行构建,它就会成功构建。这是nmakecmake 内部的问题吗?

【问题讨论】:

    标签: c++ opencv build cmake nmake


    【解决方案1】:

    显然,这是一个已知的错误 (issue 5496),已被标记为 wontfix。 在 cmets 中,用户 MarianMMX 建议了以下解决方法:

    1. 打开 CMakeLists.txt 。
    2. 转到第 70 行。(注意:在我的例子中是第 90 行,所以最好进行文本搜索)
    3. 评论(或删除):

      #if(MSVC)
      # set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
      #endif()
      
    4. 删除生成的文件并重新运行cmake。

    我已经使用nmake(VS2010 和 VS2013)成功编译了OpenCV 3.0.0 应用上述解决方法:

    > cmake -G"NMake Makefiles" <other options> <opencv src dir>
    ...
    > nmake
    ...
    

    【讨论】:

      【解决方案2】:

      这不是答案,只是我做了一些调试。问题不在于链接。问题在于堆积的 cd 命令。我无法找到这些在 CMake 脚本中的位置,但是在某个地方,这些都出错了。如果您使用以下命令运行 C​​Make 配置步骤:

       -DCMAKE_VERBOSE_MAKEFILE=true
      

      然后你会看到如下输出:

      [ 2%] Linking C static library ..\lib\zlib.lib cd 3rdparty\zlib C:\Users\builder\Miniconda2\envs\_build\Library\bin\cmake.exe -P CMakeFiles\zlib.dir\cmake_clean_target.cmake cd ..\.. cd 3rdparty\zlib The system cannot find the path specified.

      后面的 cd 行非常可疑 - 如果没有一些连接字符,您不能将两个 cd 链接在一起。这里的 NMake 生成器出了点问题 - 由于 OpenCV 源代码,或者由于 CMake。

      如果你深入研究build/3rdparty/zlib/CMakeFiles/zlib.dir/build.make 文件,你会明白为什么会这样:所有cd ..\..\ 行都有额外的斜杠,我认为在行尾是行继续,而不是结尾路径。

      【讨论】:

        猜你喜欢
        • 2019-09-04
        • 2013-05-25
        • 1970-01-01
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-02
        • 1970-01-01
        相关资源
        最近更新 更多