Clion在Windows下build时出现undefined reference,即使cmake已经正确链接第三方库(如protobuf)?

我成小丑了!(2023年11月27日 22:53:23更新)

在clion中使用vcpkg安装包时候,不要选择让vcpkg决定!!!!因为vcpkg是微软开发的,所以默认选择的是msvc编译器!!!!使用mingw时需要自己制定编译器!!!!!!!!!!!原来我才是傻呗
Clion在Windows下build时出现undefined reference,即使cmake已经正确链接第三方库(如protobuf)?_第1张图片Clion在Windows下build时出现undefined reference,即使cmake已经正确链接第三方库(如protobuf)?_第2张图片
好了,破案了,下面的都别看了,散场了散场了

注意:opencv如果使用mingw编译的话,不要使用vcpkg,因为会安装到最后会失败,出BUILD_FAILED错误,在port.cmake啥的有错误,要用vcpkg安装opencv的话,建议使用msvc,也就是让vcpkg决定(即x64:windows)

你是否正在使用clion自带的vcpkg来安装了protobuf?
或者你是否自己使用visual studio自己编译了libprotobuf.lib
你是否已经正确在CmakeLists.txt中添加了以下命令:

find_package(Protobuf CONFIG REQUIRED)
include_directories(${Protobuf_INCLUDE_DIRS})
link_directories(${Protobuf_LIBRARIES})
target_include_directories(Test PRIVATE ${CMAKE_SOURCE_DIR})
target_link_libraries(Test
        PRIVATE ${PROTOBUF_LIBRARIES}
        protobuf::libprotoc
        protobuf::libprotobuf
        protobuf::libprotobuf-lite
)

不论你怎样修改cmake语句,cmake也能正常生成,但是却在build时出现undefined reference 第三方库(如protobuf)

如果上面说的很符合你,那么你来对地方了!

原因

clion默认的编译器是mingw(g++/gcc),而clion自带的vcpkg下载的库或者你自己用visual studio编译的库是msvc编译器的(太坑啦!!!!!!!!!!!!),而你却用mingw(g++/gcc)来链接msvc编译器生成的库,两个不同编译器生成的文件不能链接!!!!!!!!!!!

解决方法

方法自然是使用msvc编译器而不是clion自带的mingw编译器了!!!!!!!

打开设置,新建一个配置文件,按照图中的指示,MSVC工具链需要点击“管理工具链”进去配置;同时记得“生成器”不要选择“使用默认值”,要“让CMake决定”!这个很重要!!!!!
Clion在Windows下build时出现undefined reference,即使cmake已经正确链接第三方库(如protobuf)?_第3张图片

点击+号新建Visual Studio
Clion在Windows下build时出现undefined reference,即使cmake已经正确链接第三方库(如protobuf)?_第4张图片

只需制定工具集目录,这个目录如图所示!其余选项无需配置,如果要配置,跟着我图里的一样!!!!!!!
Clion在Windows下build时出现undefined reference,即使cmake已经正确链接第三方库(如protobuf)?_第5张图片

Clion在Windows下build时出现undefined reference,即使cmake已经正确链接第三方库(如protobuf)?_第6张图片

完成之后按确定,关闭CLION然后再打开,clion就会开始配置msvc的环境,风扇开始嘎嘎转,之后你的第三方库就能正常被链接了!!!!!!!!!!!!!!不会再出现undefined reference了!!!!!!!!!!!

折磨了我一天啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,终于解决了!!!!!!!!!!!!!!!!!傻呗Clion

你可能感兴趣的:(windows,cmake,C++,c++)