我正在尝试将sfm模块用于opencv。问题是将其联系起来。 那么,让我们看看代码。
main.cpp中:
function ColorChange() {
var color = green;
if color == "green" {
var color = blue;
}
else if color == blue {
var color = red;
}
else {
var color = green;
}
}
我将此代码编译为main.o.现在,我想将它与libopencv_core.so和libopencv_sfm.so链接起来。 第二个文件包含函数'reconstruct'的定义。我为什么确定?当我输入:
...
cv::sfm::reconstruct(images_paths, Rs_est, ts_est, K2, points3d_estimated, true)
...
我得到了:
nm -D libopencv_sfm.so | grep reconstruct
我在main.o文件中检查了重构函数的签名。它符合:
00000000000b4ca0 T _ZN2cv3sfm11reconstructERKNS_11_InputArrayERKNS_12_OutputArrayES6_RKNS_17_InputOutputArrayEb
00000000000b4ba0 T _ZN2cv3sfm11reconstructERKNS_11_InputArrayERKNS_12_OutputArrayES6_RKNS_17_InputOutputArrayES6_b
00000000000b2650 T _ZN2cv3sfm11reconstructESt6vectorISsSaISsEERKNS_12_OutputArrayES6_RKNS_17_InputOutputArrayEb
00000000000b2550 T _ZN2cv3sfm11reconstructESt6vectorISsSaISsEERKNS_12_OutputArrayES6_RKNS_17_InputOutputArrayES6_b
因此共享库包含reconstruct的定义。
现在,我链接:
_ZN2cv3sfm11reconstructESt6vectorISsSaISsEERKNS_12_OutputArrayES6_RKNS_17_InputOutputArrayES6_b
它给了我错误:
g++ libopencv_core.so libopencv_sfm.so main.o -o main
我不明白。毕竟libopencv_sfm.so包含该函数的定义!
请:不要告诉我:使用cmake。我尝试使用cmake,问题是一样的。所以我试着在低级别上理解它。
提前致谢。
(gcc版本:5.1.1)
答案 0 :(得分:3)
要链接库,请使用-l
标志,并在依赖于它们的对象之后添加依赖项:
g++ -o main main.o -L. -lopencv_sfm -lopencv_core
-L.
将在当前路径中搜索派系。如果不需要,请省略。