我正在尝试构建共享对象,以便以后在其他项目中使用共享对象中的函数function selectHider() {
var checkBox = document.getElementById("checkerBox");
//You can set disable default here, depend on your logic
document.getElementById("selection").setAttribute("disabled", "disabled");
if (checkBox.checked == true){
document.getElementById("selection").removeAttribute("disabled");
}
}
。
它使用外部库以及我在多个项目中使用的一堆标题。
使用CMake,我创建了一个项目MySharedLib,其头文件名为
DoSomethingUseful()
:
library.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
我的CMake文件是这样的:
#include "library.h"
void DoSomethingUseful(int[] inparray){...}
*。so文件创建成功,即。 e。使用Clion,不会引发任何错误,并且文件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})
在那里。
但是,当我想在另一个文件libMySharedLib.so
中使用函数DoSomethingUseful()
时:
DoSomething.cpp
还有
#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/
我发现有很多线程通常都在处理这个问题,并且我已经从这些问题中收集了很多有关共享对象的知识,还可以从正在运行的各种教程中获取示例。 但是,我没有提出自己的项目。
这只是许多问题之一,但我希望我能在这里获得帮助,也可以提供一般提示。非常感谢您的帮助。
答案 0 :(得分:1)
假设使用Linux(如果错误,请修改问题)。运行可执行文件时,共享库仅从/etc/ld.so.conf中列出的路径加载。如果要从其他地方(。)加载,则必须设置LD_LIBRARY_PATH环境变量,例如 LD_LIBRARY_PATH =。 ./DoSomething