【发布时间】:2020-11-18 10:54:31
【问题描述】:
说明
我有以下问题:
-
我正在开发库 libmy_code.so
-
我需要链接到一个封闭的源代码库 libclosed_source.so 我无法控制
-
libclosed_source.so 静态链接到 opencv 3.2.0
-
libclosed_source.so 已导出 all 符号(还有那些我不想要的来自 opencv 3.2.0 的符号)
-
我的库 libmy_code.so 也需要更新版本的 opencv 3.4.11
-
我使用 CMake 作为构建系统
见下图
+-------------+
+--->|libmy_code.so+<-------+
| +-------------+ |
| |
Statically linked | |dynamically linked
| |
| |
| |
| |
| +-------+-----------+
| |libclosed_source.so|
| +-------------------+
| ^
| | Statically linked
| |
+---+---------+ +-----+------+
|OpenCV 3.4.11| |Opencv 3.2.0|
+-------------+ +------------+
问题
-
我的库 libmy_code.so 使用 cv::resize。 CMake 构建系统在 OpenCV 3.4.11 的标头中正确定位 cv::resize(我使用 find_package(OpenCV) 并将其指向 opencv 3.4.11 安装)。
-
但是,链接器将 cv::resize 链接到 libclosed_source.so(静态包含 cv::resize 的 Opencv3.2.0 版本)。
-
我的构建系统在一个绝对没有 opencv 3.2.0 的 docker 容器中运行。
-
我找到的最接近的问题是this
如何告诉链接器不要将 opencv 函数 libmy_code.so 链接到 libclosed_source.so 而是直接链接到 Opencv 3.4.11 ??
【问题讨论】:
-
如果您使用 CMake,您可以使用 HINTS 来引导它在导入库时选择特定位置 - 请参阅 stackoverflow.com/questions/12075371/…
-
@Den-Jason 我在构建容器中只有 OpenCV 3.4.11。 OpenCV 3.2 通过静态链接到 libclosed_source.so 进入。 HINTS 还能用吗??
-
@MilindDeore 谢谢这看起来不错