【环境配置】windows下gipuma(fusibile同理)环境配置(踩坑记录)

两位大佬的文章:【环境搭建】深度图融合点云fusibile环境配置_fusibile cmake报错-CSDN博客

MVSNet depthfusion配置流程_depth fusion-CSDN博客

cmake编译点云融合工具fusibile-CSDN博客

首先需要配置好opencv和cuda的环境,这步我之前就配置好的,添加进路径即可

在使用powershell时,在新建一个build文件夹作为输出文件夹,cd到build路径下,输入cmake ..后,出现识别不到make..命令的错误

出现这个问题,需要安装MinGW ,安装参考链接,安装MinGW后,将其bin路径添加进系统环境变量。

安装成功后仍然出现这个问题:

继续查找问题:

需要将MinGW\bin路径下的mingw32make.exe文件重命名为make.exe

cmake .. 成功后:

输入make继续完成编译,但出现找不到makefile文件的错误,如下图所示:

网上查阅发现是windows下cmake无法输出makefile文件(确实没有),查阅后尝试输入cmake .. -G "MinGW Makefiles命令,网上说可以生成,但我仍然无法生成。

继续查阅后输入cmake --build . 命令,可以编译

但仍然还有问题,出现nvcc的错误。查阅后发现时gipuma发布的时间较早,cmakelist中的不同显卡的CUDA架构问题,在CMakeList中将第10行中的set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O3 --use_fast_math --ptxas-options=-v -std=c++11 --compiler-options -Wall -gencode arch=compute_75,code=sm_75)更改为正确的版本。

先在命令行使用nvcc --version命令查看当前版本信息

然后在,在Matching CUDA arch and CUDA gencode for various NVIDIA architectures查看自己对应的cuda架构,如我的4070即为set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O3 --use_fast_math --ptxas-options=-v --compiler-options -Wall  -arch=sm_86 -gencode=arch=compute_86,code=sm_86 -gencode=arch=compute_86,code=compute_86)

在修改对应cuda架构后,又出现新的问题,出现乱码,报错代码为D8016如下图所示:

查阅后又发现,在使用 MSVC(Microsoft Visual C++ 编译器)编译代码时,同时使用了 -RTC1 和 -O2 编译选项,而这两个选项是互相冲突的。-RTC1 启用运行时检查(Runtime Error Checks),而 -O2 启用优化选项。由于运行时检查和优化选项不能同时启用,所以会出现这个错误。

修改cmakelist代码为:

set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};--use_fast_math --ptxas-options=-v --compiler-options -Wall -gencode=arch=compute_86,code=sm_86)

if(CMAKE_BUILD_TYPE STREQUAL "Debug")

    list(APPEND CUDA_NVCC_FLAGS -RTC1)

elseif(CMAKE_BUILD_TYPE STREQUAL "Release")

    list(APPEND CUDA_NVCC_FLAGS -O2)

endif()

仍然出现问题,在cmakelist中添加一行set(CMAKE_VERBOSE_MAKEFILE ON),可以在运行 CMake 时,查看更多的日志信息

CMake Warning (dev) in CMakeLists.txt: Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. Run "cmake --help-policy CMP0104" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

CUDA_ARCHITECTURES is empty for target "gipuma". This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) in CMakeLists.txt: Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. Run "cmake --help-policy CMP0104" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

CUDA_ARCHITECTURES is empty for target "gipuma". This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) in CMakeLists.txt: Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. Run "cmake --help-policy CMP0104" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

CUDA_ARCHITECTURES is empty for target "gipuma". This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) in CMakeLists.txt: Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. Run "cmake --help-policy CMP0104" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

CUDA_ARCHITECTURES is empty for target "gipuma". This warning is for project developers. Use -Wno-dev to suppress it.

查看日志信息后发现,CMakeLists.txt中没有设置CMAKE_CUDA_ARCHITECTURES,这是CMake 3.18及以上版本引入的新要求,需要显式地指定CUDA架构。

在文件开头添加set(CMAKE_CUDA_ARCHITECTURES 86),明确指定目标GPU架构为sm_86。

仍然出现问题,还是乱码,D8016报错,问题还是指向关于/RTC1和/O2的冲突

最终做了如下修改:

1.禁用运行时检查 (/RTC1):使用 string(REPLACE "/RTC1" "" ...) 将 /RTC1 从 CMAKE_CXX_FLAGS、CMAKE_CXX_FLAGS_RELEASE、CMAKE_CXX_FLAGS_DEBUG、CMAKE_C_FLAGS、CMAKE_C_FLAGS_RELEASE 和 CMAKE_C_FLAGS_DEBUG 中移除。

2.调整优化选项 (/O2):使用 string(REPLACE "/O2" "" ...) 将 /O2 从 CMAKE_CXX_FLAGS_RELEASE 和 CMAKE_C_FLAGS_RELEASE 中移除,以避免与CUDA编译器的优化选项冲突。

3.添加必要的编译器选项:在 if(MSVC) 分支中,为CUDA编译器添加必要的编译选项,例如 /W4(启用所有警告)。

修改后,终于能够成功编译,可以得到pipuma.exe文件

最终的cmakelist:

cmake_minimum_required(VERSION 3.9)
project(gipuma LANGUAGES CXX CUDA)

# Enable C++11 globally
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# Support IDEs
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "cmake-default-targets")

# Find CUDA and OpenCV
find_package(CUDA REQUIRED)
find_package(OpenCV REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(.)

# Set CUDA compilation flags based on build type
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O0 --use_fast_math --ptxas-options=-v -gencode arch=compute_86,code=sm_86)
else()
    set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O3 --use_fast_math --ptxas-options=-v -gencode arch=compute_86,code=sm_86)
endif()

if(CMAKE_COMPILER_IS_GNUCXX)
    add_definitions(-Wall -Wextra -pedantic -Wno-unused-function -Wno-switch)
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Ofast -ffast-math -march=native")
endif()

find_package(OpenMP)
if(OPENMP_FOUND)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()

if(MSVC)
    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
    # Disable /RTC1 (runtime checks)
    string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
    string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
    string(REPLACE "/RTC1" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
    string(REPLACE "/RTC1" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
    
    # Adjust optimization flags
    string(REPLACE "/O2" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
    string(REPLACE "/O2" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
    
    # Add necessary flags for CUDA compilation
    set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};--compiler-options "/W4")
endif()

# For compilation
cuda_add_executable(
    gipuma
    cameraGeometryUtils.h
    vector_operations.h
    camera.h
    globalstate.h
    algorithmparameters.h
    cameraparameters.h
    linestate.h
    groundTruthUtils.h
    displayUtils.h
    fileIoUtils.h
    main.h
    gipuma.cu
    main.cpp
)

# For linking
target_link_libraries(gipuma
    ${OpenCV_LIBS}
    OpenMP::OpenMP_CXX
)

include(FeatureSummary)
feature_summary(WHAT ALL)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值