金牌28号技师 2024-03-24 19:34 采纳率: 25%
浏览 6

C++,CMake,QT

最近写CMake遇到了个问题,我用Clion创建了一个Cmake项目,想把jsoncpp集成进来,编译的时候提示在代码中引用的方法未定义,网上的方法都试遍了,chatgpt给的方案也试遍了都不行,是哪里出了问题,麻烦指条明路

这是我的项目结构:

img

cmake_minimum_required(VERSION 3.25)
project(untitled)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

set(CMAKE_PREFIX_PATH "C:/Qt/6.6.2/mingw_64")

file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)

include_directories(${PROJECT_SOURCE_DIR}/include)

find_package(Qt6 COMPONENTS
        Core
        Gui
        Widgets
        REQUIRED)

add_executable(untitled main.cpp)

# 指定jsoncpp库的路径
link_directories("D:/temp/untitled/lib2")

# 链接jsoncpp库
target_link_libraries(untitled "D:/temp/untitled/lib2/libjsoncpp.lib")
# 修改链接顺序,先链接 JSON 库,再链接 Qt 库
target_link_libraries(untitled
        Qt::Core
        Qt::Gui
        Qt::Widgets
        )

这是测试的代码段

img

  • 写回答

2条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-03-24 19:34
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: 在使用CMake构建项目时,想要将jsoncpp集成进来,但编译时提示在代码中引用的方法未定义,已试过网上给出的各种方法,包括chatgpt给出的方案,但仍然无效。请问问题可能出在哪里,如何解决? 解答步骤:
    1. 确认jsoncpp库是否已正确地添加到项目中:在项目文件夹下查看是否存在jsoncpp的头文件和库文件。
    2. 确认jsoncpp库的版本是否匹配:若jsoncpp库的版本过低,可能会导致编译时出现未定义的方法。
    3. 正确地链接jsoncpp库:在CMakeLists.txt文件中添加以下链接命令:
    4. 指定jsoncpp库的路径:link_directories("D:/temp/untitled/lib2")(注意:此处路径需根据实际情况修改);
    5. 链接jsoncpp库:target_link_libraries(untitled "D:/temp/untitled/lib2/libjsoncpp.lib")(注意:此处路径需根据实际情况修改);
    6. 修改链接顺序,先链接JSON库,再链接Qt库:target_link_libraries(untitled Qt::Core Qt::Gui Qt::Widgets)
    7. 确认代码中对jsoncpp库的调用是否正确:在测试的代码段中,需先包含jsoncpp的头文件:#include "json/json.h"
    8. 如果仍然无法解决问题,考虑重新配置CMakeCache:删除CMakeCache.txt文件,重新运行CMake配置工具。 解答案例: 在已添加jsoncpp库的情况下,假设存在以下测试代码:
    #include "json/json.h"
    #include <iostream>
    using namespace std;
    int main(int argc, char** argv) {
      Json::Value root;
      root["name"] = "Alice";
      root["age"] = 18;
      cout << "Name: " << root["name"].asString() << endl;
      cout << "Age: " << root["age"].asInt() << endl;
      return 0;
    }
    

    可以通过以下方法来正确地链接jsoncpp库,并解决编译错误:

    cmake_minimum_required(VERSION 3.25)
    project(untitled)
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)
    set(CMAKE_AUTOUIC ON)
    set(CMAKE_PREFIX_PATH "C:/Qt/6.6.2/mingw_64")
    file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
    include_directories(${PROJECT_SOURCE_DIR}/include)
    # 查找并链接Qt库
    find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED)
    # 指定jsoncpp库的路径
    link_directories("D:/temp/untitled/lib2")
    # 链接jsoncpp库
    target_link_libraries(untitled "D:/temp/untitled/lib2/libjsoncpp.lib")
    # 修改链接顺序,先链接 JSON 库,再链接 Qt 库
    target_link_libraries(untitled Qt::Core Qt::Gui Qt::Widgets)
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月24日

悬赏问题

  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制