gpt4 book ai didi

C++ 共享库 : Creation and usage

转载 作者:行者123 更新时间:2023-11-28 04:31:57 27 4
gpt4 key购买 nike

我正在尝试构建一个共享对象,以便稍后在其他项目中使用共享对象中的函数 DoSomethingUseful()。它使用外部库以及我在多个项目中使用的一堆 header 。

使用 CMake,我创建了一个名为 MySharedLib 的项目,其头文件名为 库.h:

#ifndef MYSHAREDLIB_LIBRARY_H
#define MYSHAREDLIB_LIBRARY_H



#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstdio>

// own header files
#include <header1.h>
#include <header2.h>

#define PI 3.14159265

//tesseract
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>


//openCV
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

//face detection
#include "opencv2/objdetect.hpp"
#include "opencv2/imgproc.hpp"

void DoSomethingUseul(int[] inparray);


#endif

library.cpp

#include "library.h"
void DoSomethingUseful(int[] inparray){...}

我的 CMake 文件是这样的:

cmake_minimum_required(VERSION 3.10)
project(MYSHAREDLIB)

find_package( OpenCV REQUIRED )

set(CMAKE_CXX_STANDARD 11)

set(MY_INCLUDE_DIR ../source/)
set(MY_OPENCV_CASCADES /opencvpath/openCV34/opencv/sources/data/haarcascades/)
include_directories(${MY_INCLUDE_DIR} ${MY_OPENCV_CASCADES} /usr/include)

link_directories(${MY_INCLUDE_DIR})

add_library(MYSHAREDLIB SHARED library.cpp library.h
${MY_INCLUDE_DIR}header1.cpp
${MY_INCLUDE_DIR}header1.h
${MY_INCLUDE_DIR}header2.cpp
${MY_INCLUDE_DIR}header2.h
)

set_target_properties(MYSHAREDLIB PROPERTIES VERSION 3.10)
set_target_properties(MYSHAREDLIB PROPERTIES SOVERSION 1)

target_link_libraries(MYSHAREDLIB lept tesseract ${OpenCV_LIBS})

*.so文件创建成功,i. e.使用 Clion,不会抛出任何错误,并且文件 libMySharedLib.so 就在那里。

但是,当我想在另一个文件 DoSomething.cpp 中使用函数 DoSomethingUseful() 时:

#include <iostream>
#include "library.h"

using namespace std;

int main()
{

int[2] myarray; myarray[0]=1; myarray[1] =2;

DoSomethingUseful(myarray);

return 0;
}

 g++ -g -Wall -o DoSomething DoSomething.cpp -I ../source/ -L. libMYSHAREDLIB.so 

当我执行

./DoSomething

我得到:

./DoSomething: error while loading shared libraries: libMYSHAREDLIB.so: cannot open shared object file: No such file or directory

之前,我编译时没有 -I ../source/ 产生:

In file included from DoSomething.cpp:8:0:
library.h:19:10: fatal error: header1.h: No such file or directory
#include <header1.h>

我发现很多线程一般都在处理这个问题,并且我已经从这些问题中收集了很多关于共享对象的知识,也成功地从运行的各种教程中获取了示例。 但是,我自己的项目没有成功。

这只是众多问题中的一个,但我希望我能在这里得到帮助,也许还有一般提示。非常感谢您的帮助。

最佳答案

假设是 Linux(如果错误请修改)。运行可执行文件时,仅从/etc/ld.so.conf 中列出的路径加载共享库。如果你想从其他地方加载 (.) ,你必须设置 LD_LIBRARY_PATH 环境变量,例如LD_LIBRARY_PATH=。 ./DoSomething

关于C++ 共享库 : Creation and usage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52625096/

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