首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenPose标志的多个定义CMakeFiles/./main.cpp.o:首先在这里定义

OpenPose标志的多个定义CMakeFiles/./main.cpp.o:首先在这里定义
EN

Stack Overflow用户
提问于 2020-02-08 14:57:22
回答 1查看 480关注 0票数 0

我已经发现这个问题很多次了,我在这里(在堆栈溢出)和其他地方(谷歌搜索)找到了几十个答案,但是没有什么效果。一开始,我把所有的代码都放在一个文件中,所有的代码都正常工作。但是现在,我需要将代码分割成多个文件,创建一些类等等,所以我创建了以下文件:

stdafx.h

代码语言:javascript
复制
#pragma once

#include <iostream>
#include <fstream>
#include <iomanip>
#include <ctime>

// opencv
#include <opencv2/opencv.hpp>

// openpose
#include <openpose/flags.hpp>
#include <openpose/headers.hpp>

#include "driver-keypoints.h"

driver-keypoints.h

代码语言:javascript
复制
#pragma once

class DriverKeypoints
{
public:
    DriverKeypoints();

    static const int NOSE = 0;
    static const int NECK = 1;
    static const int R_SHOULDER = 2;
    static const int R_ELBOW = 3;
    static const int R_WRIST = 4;
    static const int L_SHOULDER = 5;
    static const int L_ELBOW = 6;
    static const int L_WRIST = 7;
    static const int MID_HIP = 8;
    static const int R_HIP = 9;
    static const int L_HIP = 12;

    int get_video_keypoints();

protected:
    void save_keypoints(const std::shared_ptr<std::vector<std::shared_ptr<op::Datum>>>& datums_ptr,
                        std::string out_file, bool is_first);
    void configure_wrapper(op::Wrapper& op_wrapper);
};

driver-keypoints.cpp

代码语言:javascript
复制
#include "stdafx.h"

// Custom OpenPose flags
// TODO: here should not have been an absolute path
DEFINE_string(output_path, "/path/to/output/openpose/", "Path to save required keypoints.");
DEFINE_bool(no_display, false, "Enable to disable the visual display.");

void DriverKeypoints::save_keypoints(const std::shared_ptr<std::vector<std::shared_ptr<op::Datum>>> &datums_ptr,
                                     std::string out_file, bool is_first) {
}

void DriverKeypoints::configure_wrapper(op::Wrapper &op_wrapper) {
}

int DriverKeypoints::get_video_keypoints() {
}

main.cpp

代码语言:javascript
复制
#include "stdafx.h"

int main(int argc, char** argv) {
  FLAGS_disable_multi_thread = true;

  FLAGS_net_resolution = "-1x192";
  FLAGS_number_people_max = 0;

  // Parsing command line flags
  gflags::ParseCommandLineFlags(&argc, &argv, true);

  // run parse keypoints from video
  DriverKeypoints driver_keypoints;
  return driver_keypoints.get_video_keypoints();
}

CMakeLists.txt

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.14)
project(my_project)

set(CMAKE_CXX_STANDARD 14)


find_package(OpenCV REQUIRED)
find_package(CUDA REQUIRED)
find_package(Caffe REQUIRED)
find_package(gflags REQUIRED)


include_directories(
        OpenCV_INCLUDE_DIRS
        ${CUDA_INCLUDE_DIRS}
        ${CAFFE_INCLUDE_DIRS}
)

# TODO: here should not have been an absolute path
include(/home/path_to_openpose/openpose/cmake/Utils.cmake)

set(SOURCE_FILES main.cpp driver-keypoints.cpp)
add_executable(anomalies_analysis ${SOURCE_FILES})

target_link_libraries(
        anomalies_analysis
        ${OpenCV_LIBS}
        ${CUDA_LIBRARIES}
        openpose
        gflags
)

我正在跟踪错误

代码语言:javascript
复制
CMakeFiles/anomalies_analysis.dir/driver-keypoints.cpp.o:(.data+0x0): multiple definition of `fLI::FLAGS_logging_level'
CMakeFiles/anomalies_analysis.dir/main.cpp.o:(.data+0x0): first defined here
CMakeFiles/anomalies_analysis.dir/driver-keypoints.cpp.o:(.data+0x4): multiple definition of `fLI::FLAGS_nologging_level'
CMakeFiles/anomalies_analysis.dir/main.cpp.o:(.data+0x4): first defined here
CMakeFiles/anomalies_analysis.dir/driver-keypoints.cpp.o:(.bss+0x0): multiple definition of `fLB::FLAGS_disable_multi_thread'
CMakeFiles/anomalies_analysis.dir/main.cpp.o:(.bss+0x0): first defined here
CMakeFiles/anomalies_analysis.dir/driver-keypoints.cpp.o:(.bss+0x1): multiple definition of `fLB::FLAGS_nodisable_multi_thread'
CMakeFiles/anomalies_analysis.dir/main.cpp.o:(.bss+0x1): first defined here
...

有许多类型的答案:

possible)

  • you不应该只定义某事一次(但我认为我正在这样做,问题似乎是在包含openpose/flags.hpp,但我在stdafx.h中有#pragma once,那么问题在这里吗?)

你能帮帮我吗?我在C/C++编程方面没有足够的经验。非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2021-01-21 21:05:35

我知道现在已经很晚了,但我也遇到了类似的问题,于是出现了这条线索。

我的代码在一个文件中运行良好,当我创建一个头文件并将其包含在多个位置时,给出了与您的代码类似的错误。在我的例子中,头文件中有DEFINE_type(),而不是DECLARE_type(),这会导致问题,因为变量被定义了不止一次。我将再次检查您是否使用的是DECLARE_方法,而不是头文件中的DEFINE_方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60127973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档