创建C++在Linux中使用OpenCV的动态库

creating C++ dynamic library which uses opencv in linux

本文关键字:OpenCV 动态 C++ Linux 创建      更新时间:2023-10-16

我正在尝试在Linux中创建一个共享库,该程序使用opencv和tesseract与动态链接

我关注了链接我的代码如下

g++ -c Serial_Key.cpp -fPIC -o cdserial `pkg-config --cflags --libs opencv` -llept -ltesseract
g++ -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0 cdserial
ln -sf libctest.so.1.0 libctest.so
ln -sf libctest.so.1.0 libctest.so.1
g++ -c Test.cpp -fPIC -o cprog -lctest `pkg-config --cflags --libs opencv` -llept -ltesseract

这里Test.cpp是一个简单的文件,如下所示

#include <stdio.h>
int Serial_key();
int main(){
int x=Serial_key();
printf("Success");
return 0;}

不知何故,它为 ./cprog 提供了错误./cprog:无法执行二进制文件:执行格式错误

我觉得我在第二行犯了一些根本性错误(g++ -共享)请指导

经过一番嘎吱

嘎吱,我在上面提到的问题中发现了几个愚蠢的错误

这是针对可能遇到类似问题的其他人的更正流程

  1. 首次编译

    g++ -c Serial_Key.cpp -fPIC -o cdserial

  2. 通过提及库及其路径来创建共享库

    g++ -shared -wl,-soname,libctest.so.1 -o libctest.so.1.0 cdserial -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_imgcodecs -lopencv_videoio -llept -ltesseract -L/usr/local/lib

  3. 将 soname 与库链接

    ln -sf libctest.so.1.0 libctest.so ln -sf libctest.so.1.0 libctest.so.1

  4. 编译并创建测试文件的对象

    g++ Test.cpp -fPIC -o cprog -lctest -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_imgcodecs -lopencv_videoio -llept -ltesseract -L/usr/local/lib

  5. 将共享库文件复制到本地库

    cp libctest.so/usr/local/libcp libctest.so.1/usr/local/libcp libctest.so.1.0/usr/local/lib

  6. 确保$LD_LIBRARY_PATH 指向共享库路径

    导出 LD_LIBRARY_PATH=/usr/local/lib

  7. ./cprog