创建一个取决于其他共享对象的共享对象
Creating a shared object which depends on other shared objects
问题
我正在创建一个共享对象(称为libA.so
),该对象使用OPENCV共享对象(例如libopencv_core.so
)。
这是我共享对象的代码:
#include "opencv2/opencv.hpp"
#include "rgbframe.h"
#define API_EXPORT __attribute__ ((visibility ("default")))
#define API_LOCAL __attribute__ ((visibility ("hidden")))
using namespace cv;
API_EXPORT RGBFrame getFrame(int width, int height){
VideoCapture cap(0);
RGBFrame frame;
if(!cap.isOpened())
return frame;
// Set camera resolution
cap.set(CV_CAP_PROP_FRAME_WIDTH, width);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, height);
frame.rows = height;
frame.cols = width;
frame.data = new uchar[frame.rows * frame.cols * 3];
Mat mat(frame.rows, frame.cols, CV_8UC3, frame.data);
// Get a frame
cap >> mat;
// Convert BGR to RGB
cv::cvtColor(mat, mat, CV_BGR2RGB, 3);
return frame;
}
这也是我编译的方式:
gcc -shared -fPIC -Wl,-soname,libA.so -std=c++11 -lpthread -lopencv_core -lopencv_video -lopencv_highgui -lopencv_imgproc -o libA.so test.cpp
因此,从上面的行,我们知道libA.so
取决于opencv_core
,opencv_video
等。
它可以编译并链接正常,但是当我 ldd libA.so
时,它会打印:
linux-vdso.so.1 => (0x00007ffc71b76000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f074cbaa000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f074c7e3000)
/lib64/ld-linux-x86-64.so.2 (0x000055b29e8bd000)
这意味着我的库不取决于OPENCV .so
文件。除此之外,当我在简单程序中使用库时,整个程序不会编译。我在libA.so
中使用的openCV函数将有一堆undefined reference
。
问题
我应该如何构建我的 libA.so
使其取决于OpenCV库?当我在其他程序中使用它时,它将被编译和链接。
这可能是一个dup的dup,dup是一对一折 - 与靠近的靠背依赖的属于单位共享的折扣
tldr是您应该在对象/源文件之后放置链接的libs。
相关文章:
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 如何创建一个共享对象与另一个.所以在Cmake
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 在 Android Studio 中使用 C++ 共享对象时出现问题
- 共享对象、符号、C/C++ 库链接和加载
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 在 win32 上生成 R 包:无法加载共享对象 (.dll)
- 共享对象中的符号
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- C++ 为什么要级联共享对象链接
- 加载共享库时出错:libbsoncxx.so._noabi:无法打开共享对象文件:没有此类文件或目录
- 从单个.cpp构建共享对象
- 与 32 位共享对象的链接问题
- 卸载共享对象(.so 文件)在 C++ 中用 dlopen() 打开
- 运行程序时找不到共享对象库,但在编译过程中链接了它
- 错误:无法打开共享对象文件:没有此类文件或目录
- Qt 创建器:将库移动到 subdir 后无法打开共享对象文件
- 共享对象中的符号名称与文件中.cpp函数不同
- C++:在共享对象中调用抽象基类构造函数/未定义的符号
- Cython:共享对象中未定义的符号