你是否正在使用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决定”!这个很重要!!!!!
点击+号新建Visual Studio
:
只需制定工具集目录,这个目录如图所示!其余选项无需配置,如果要配置,跟着我图里的一样!!!!!!!
完成之后按确定,关闭CLION然后再打开,clion就会开始配置msvc的环境,风扇开始嘎嘎转,之后你的第三方库就能正常被链接了!!!!!!!!!!!!!!不会再出现undefined reference
了!!!!!!!!!!!
折磨了我一天啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,终于解决了!!!!!!!!!!!!!!!!!傻呗Clion