代码之家  ›  专栏  ›  技术社区  ›  pho

链接到boost::process 0.6时出现“multiple definition”错误

  •  3
  • pho  · 技术社区  · 8 年前

    我对这个链接错误有点茫然,我认为问题在于我自己,而不是库本身,但我不知道如何解决这个问题。

    我正在尝试链接到boost::process 0.6 https://github.com/klemens-morgenstern/boost-process/

    主.cpp

    #include <boost/log/trivial.hpp>
    #include <boost/log/common.hpp>
    #include <boost/log/sinks.hpp>
    #include <boost/log/sources/logger.hpp>
    #include <boost/shared_ptr.hpp>
    
    #include <iostream>
    #include <thread>
    
    #include "ui.h"
    #include "queue.h"
    #include "image_processor.h"
    #include "recorder.h"
    
    using namespace boost::log;
    
    int main(int argc, char **argv) {
    
        atomic_bool stop_execution{false};
        shared_ptr<image_queue_blocking> recording_queue  = make_shared<image_queue_blocking>(10);
    
        /**/
        boost::filesystem::path ffmpeg_path = "/usr/bin/ffmpeg";
    
        recorder video_recorder;
        bool ret = video_recorder.setup(recording_queue, ffmpeg_path);
        if (ret == false) {
            cout << "main::recorder setup failed" << std::endl;
            return 1;
        }
    
        /**/
        thread recording_thread = thread(&recorder::start, video_recorder, ref(stop_execution));
    
        /**/
        recording_thread.join();
    
        return 0;
    }
    

    录音机.cpp

    #include "recorder.h"
    
    recorder::recorder() {
        io_service = std::make_shared<boost::asio::io_service>();
        stdin_pipe = std::make_shared<boost::process::async_pipe>(*io_service);
    }
    
    recorder::~recorder() {}
    
    bool recorder::start_process() {
        /*
        */
    }
    
    bool recorder::setup(shared_ptr<image_queue_blocking> recording_queue, boost::filesystem::path & ffmpeg_path) {
        /*
        */
        return true;
    }
    
    bool recorder::start(atomic_bool & stop_execution) {
        /*
        */
    }
    

    记录器.h

    #ifndef THREEBEE_RECORDER_H
    #define THREEBEE_RECORDER_H
    
    #ifndef RECORDER_H
    #define RECORDER_H
    
    #include <thread>
    #include <exception>
    #include <memory>
    #include <vector>
    #include <string>
    #include <iostream>
    #include <boost/assign.hpp>
    #include <boost/filesystem.hpp>
    #include <boost/iostreams/stream.hpp>
    
    #include <boost/process.hpp>
    #include "queue.h"
    
    
    class recorder {
    public:
        recorder();
        ~recorder();
        bool setup(shared_ptr<image_queue_blocking> recording_queue, boost::filesystem::path & ffmpeg_path);
        bool start(atomic_bool & stop_execution);
        bool start_process();
    
    private:
        std::shared_ptr<boost::asio::io_service> io_service;
        std::shared_ptr<boost::process::async_pipe> stdin_pipe;
        boost::filesystem::path ffmpeg_path_;
        shared_ptr<Mat> image;
        shared_ptr<image_queue_blocking> recording_queue_;
    };
    
    
    #endif //THREEBEE_RECORDER_H
    #endif //RECORDER_H
    
    CMakeFiles/main.dir/recorder.cpp.o: In function `boost::process::detail::posix::cmd_setter_::make_cmd(std::vector<std::string, std::allocator<std::string> >&)':
    
    recorder.cpp:(.text+0x11c): multiple definition of `boost::process::detail::posix::cmd_setter_::make_cmd(std::vector<std::string, std::allocator<std::string> >&)'
    
    CMakeFiles/main.dir/main.cpp.o:main.cpp:(.text+0x142): first defined here
    
    CMakeFiles/main.dir/recorder.cpp.o: In function `boost::process::detail::posix::exe_cmd_init::make_cmd()':
    
    recorder.cpp:(.text+0x1fc): multiple definition of `boost::process::detail::posix::exe_cmd_init::make_cmd()'
    
    CMakeFiles/main.dir/main.cpp.o:main.cpp:(.text+0x222): first defined here
    
    CMakeFiles/main.dir/recorder.cpp.o: In function `boost::process::detail::posix::async_pipe::operator=(boost::process::detail::posix::async_pipe&&)':
    
    recorder.cpp:(.text+0x316): multiple definition of `boost::process::detail::posix::async_pipe::operator=(boost::process::detail::posix::async_pipe&&)'
    
    CMakeFiles/main.dir/main.cpp.o:main.cpp:(.text+0x33c): first defined here
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Klemens Morgenstern    8 年前

    inline .我今天会修好的,这样你明天就能用了。您的代码没有问题:

    但非常感谢您试用测试版。审查将于10月底进行,如果你能参加,我将非常高兴。