Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 为dlib创建共享库_Cmake_Shared Libraries_Dlib - Fatal编程技术网

Cmake 为dlib创建共享库

Cmake 为dlib创建共享库,cmake,shared-libraries,dlib,Cmake,Shared Libraries,Dlib,按照使用cmake()编译dlib的说明生成静态dlib库: cd examples mkdir build cd build cmake .. cmake --build . --config Release 如何指示cmake生成共享(.so)库?根据dlib/CMakeLists.txt,独立(不是来自examples)构建dlib也会创建名为dlib shared的共享库: mkdir shared_build # Build directory can be any cd share

按照使用cmake()编译dlib的说明生成静态dlib库:

cd examples
mkdir build
cd build
cmake ..
cmake --build . --config Release

如何指示cmake生成共享(.so)库?

根据
dlib/CMakeLists.txt
,独立(不是来自
examples
)构建
dlib
也会创建名为
dlib shared
的共享库:

mkdir shared_build # Build directory can be any
cd shared_build
cmake ..
cmake --build . --config Release
make install # Install library for make it acessible for others
要在示例中使用此库,您需要在包含(../dlib/cmake)之前将
dlib
库的定义添加到
examples/CMakeLists.txt

示例/CMakeLists.txt

...
PROJECT(examples)

add_library(dlib SHARED IMPORTED) # Imported(!) dlib target
set_target_properties(dlib PROPERTIES IMPORTED_LOCATION "<full path to the installed dlib-shared library file>")

# Now it is safe to include other dlib infrustucture - it won't build dlib again.
include(../dlib/cmake)
...
。。。
项目(示例)
添加库(dlib共享导入)#导入(!)dlib目标
设置\u目标\u属性(导入的dlib属性\u位置“”)
#现在可以安全地包含其他dlib基础架构—它不会再次构建dlib。
包括(../dlib/cmake)
...

如果要创建.so文件,请执行以下操作:

cd dclib/dlib
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=1 ..
make
sudo make install
在unix系统上,将在系统范围内安装dlib。这意味着要安装.so文件和头文件,以便可以使用类似于
g++main.cpp-ldlib的命令编译程序。最后,在linux系统上,您还需要在安装任何新的共享库之后运行
sudoldconfig


但是,对于大多数用户,我建议使用CMake,如示例所示。通过这种方式,您可以随时启用或禁用调试模式,还可以更轻松地以源代码形式和编译形式分发项目。例如,如果您想在windows上编译,那么共享库肯定不是一种可行的方法。此外,使用示例中所示的CMake将始终以简单的方式工作,无需任何设置。

这不是编译dlib共享库的方式。除了missed
make install
(忘了它,认为这是不言而喻的),我的回答有什么问题?add_library语句不会以合理的方式工作。
add_library语句不会以合理的方式工作
-为什么<代码>添加库(…导入)
是使用3d party库的常用方法之一。如果要使用cmake链接已安装的库,请使用cmake的“查找包”命令。或者至少不包括dlib/cmake。这是静态版本。谢谢戴维斯!最后一行对我不起作用。似乎没有让目标安装的规则。我正在build文件夹中运行
makeinstall
。这不会为我在Linux(Ubuntu 16.04)上的任何地方创建任何.so文件。只需将.a文件放入/usr/local/lib/
locate libdlib
只返回:
/usr/local/lib/libdlib.a
是的。这些说明注明日期。我刚刚修复了它们。@DavisKing如何链接一个示例文件,比如face\u recognition\u ex.cpp?我使用
g++-c-I../-std=c++11 dnn_face_recognition_ex.cpp创建了-o文件,然后为了链接,我尝试了
g++dnn_face_recognition_ex.o-o dnn_face_recognition_ex-ldlib
,但得到了这个错误
ld:library not found for-ldlib