我用静态库选项编译了OpenCV 3.x(-DBUILD_SHARED_LIBS=OFF
(。
不,我有一个使用OpenCV的函数很少的项目。
我想将我的项目构建为可移植的静态库。
通过可移植,我的意思是我可以与他人共享它以在他们的代码中使用我的函数,而无需安装 OpenCV。
如何在Windows,macOS和Linux上做到这一点?
我希望使用编译器完成该过程,以便从所有OpenCV库中仅提取所需的对象(函数(。
它与有关该主题的其他问题有何不同?
我的问题与将多个静态库归档为一个的通用答案的区别在于选择要包含哪些函数。
假设我们有 2 个静态库 -lib001.lib
和lib002.lib
.
其中lib001.lib
有函数fun001()
、fun002()
和fun003()
,lib002.lib
有fun004()
、fun005()
和fun006()
。
让我们假设这些函数具有我不知道的依赖项(我没有编写库(。所以在我的项目中,我使用fun001()
和fun005()
,假设fun001()
取决于fun004()
,fun005()
取决于fun002()
。
我想要的是链接器理解这一点,并为我构建一个自定义静态库,其中包括我的函数和fun001()
,fun002()
fun003()
和fun004()
,而无需我告诉依赖项。
上面的备注
我假设静态库中的每个对象都是一个函数。人们可以用对象代替函数的使用,以使其更准确。
如果您希望在提到的所有 3 个平台上以静态方式编译 OpenCV,我建议使用 conan.io 包管理器(这里是 conan-opencv 包(,方法是发出以下命令:
conan install opencv/4.1.1@conan/stable -o shared=False --build=missing
然后从那里,在您的项目中使用 conan 并制作最终的静态可执行文件。
这是柯南的官方文档,并附有示例。
在您的情况下,您的 conanfile.txt 将包含以下内容:
[requires]
opencv/4.1.1@conan/stable
[generators]
cmake
[options]
opencv:shared=False