gpt4 book ai didi

c++ - 代码:: block 输出 "error: ld returned 1 exit status"没有其他

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:39 25 4
gpt4 key购买 nike

当我构建代码时,我的 Code::Blocks IDE 仅调用“错误:ld 返回 1 退出状态”。我经常看到“collect2:”这个错误是“collect2: ld returned 1 exit status”。我只知道这是链接器错误。所以我需要包括另一个 linraries。

但我没有经验,即使是 C++ 也无法使用此 IDE。

所以我不明白如何摆脱这个错误。

我想请教以下问题。

1)如何摆脱这个错误。考虑了哪些问题。

2)如何设置构建选项以适合下面的代码。

注意(构建选项):添加链接器设置中的链接库

../../opencv-2.4.13/build/lib/libopencv_highgui.so

../../opencv-2.4.13/build/lib/libopencv_core.so

../../opencv-2.4.13/build/lib/libopencv_imgproc.so

pthread

boost_system

并且,搜索目录中的编译器是

../../opencv-2.4.13/include/opencv

../../../../usr/include/boost

MyDesktop

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/managed_mapped_file.hpp>
#include <boost/interprocess/containers/vector.hpp> // boost/containers/vector.hpp
#include <boost/interprocess/containers/string.hpp> // boost/containers/string.hpp
#include <iostream>
#include <sys/time.h>
#include <stdio.h>

// void_allocator;
namespace bip = boost::interprocess;

typedef unsigned char uchar;
//Typedefs of allocators and containers
typedef bip::managed_shared_memory::segment_manager segment_manager_t;
typedef bip::allocator<void, segment_manager_t> void_allocator;

typedef void_allocator::rebind<uchar>::other uchar_allocator;
typedef bip::vector<uchar, uchar_allocator> uchar_vector;



template <typename Alloc = std::allocator<uchar> >
struct BasicInData {

public:
BasicInData(Alloc alloc = {}) : image(alloc)
{ }

template <typename T>
BasicInData(double x, int sizeImg, uchar_vector& image, Alloc alloc = {}) :
x(x), sizeImg(sizeImg), image(alloc)
{ }

double x = 0;
int sizeImg = 0;
uchar_vector image;
};

using InData = BasicInData<>; // just heap allocated

namespace Shared {
using segment = bip::managed_shared_memory;
using segment_manager = segment::segment_manager;

template <typename T> using alloc = bip::allocator<T, segment_manager>;
template <typename T> using vector = bip::vector<T, alloc<T> >;

using InData = BasicInData<alloc<uchar> >; // shared memory version

vector<InData>& locate(segment& smt) {
auto* v = smt.find_or_construct<vector<InData> >("InDataVector")(smt.get_segment_manager());
assert(v);
return *v;
}
}


int main(int argc, char* argv[]) {
if(argc == 1){ //Parent process
// Remove shared memory on construction and destruction

// Create a new segment with given name and size
struct timeval tv;
gettimeofday(&tv, NULL);
struct shm_remove
{
shm_remove(){bip::shared_memory_object::remove("MySharedMemory");}
~shm_remove(){bip::shared_memory_object::remove("MySharedMemory");}
}remover;
Shared::segment smt(bip::create_only,"MySharedMemory", 65536); // 10 Kb for coliru
auto &data = Shared::locate(smt);
//Shared::alloc bip::alloc_inst (data);

cv::Mat_<cv::Vec3b> mat;
cv::VideoCapture vcap(0);

Shared::InData id(smt.get_segment_manager());


if (!vcap.isOpened())
return -1;

while (1) {
vcap >> mat;
int image_size = mat.total() * mat.elemSize();
id.sizeImg = image_size;
id.image.resize(image_size * sizeof(uchar));
memcpy(&id.image[0], mat.data, image_size * sizeof(uchar));
//Launch child process
gettimeofday(&tv, NULL);
double time = ((double)tv.tv_usec/1000000);
id.x = time;
data.push_back(id);
if(cv::waitKey(30) >= 0) break;
}

std::string s(argv[0]); s += " child";
if(0 != std::system(s.c_str()))
return 1;

// check child has destroyed the vector
if(smt.find<Shared::vector<InData>>("InDataVector").first)
return 1;

} else{
// Open the managed segment
bip::managed_shared_memory segment(bip::open_only, "MySharedMemory");

// Find the vector using c-string name
bip::vector<InData> *myvector = segment.find<bip::vector<InData>>("InDataVector").first;
// Use vector in reverse order

bip::vector<InData>::iterator it;

cv::Mat_<cv::Vec3b> im;
for(it = myvector->begin(); it !=myvector->end(); ++it){
im.resize(it->sizeImg);
memcpy(im.data, &it->image[0], it->sizeImg);
cv::imshow("window1", im);
}

segment.destroy<bip::vector<InData>>("InDataVector");

return 0;
}
}

最佳答案

谢谢,@greatwolf。最后,我可以摆脱那个错误。现在,我在下面显示“链接器设置”。

../../opencv-2.4.13/build/lib/libopencv_highgui.so

../../opencv-2.4.13/build/lib/libopencv_core.so

../../opencv-2.4.13/build/lib/libopencv_imgproc.so

pthread

boost_system

rt

关于c++ - 代码:: block 输出 "error: ld returned 1 exit status"没有其他,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41455552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com