Opencv C++;将两个共享库链接到main.cpp

Opencv C++;将两个共享库链接到main.cpp,opencv,c++11,makefile,cmake,shared-libraries,Opencv,C++11,Makefile,Cmake,Shared Libraries,我在尝试将两个共享库链接到cmake文件中的main.cpp文件时遇到一些问题 我的文件夹树是: **mainfolder** |_main.cpp |_CMakeLists.txt | | **lib** |_**lib1** |_CMakeLists.txt |_liblib1.so |_**src** |_lib1.cp

我在尝试将两个共享库链接到cmake文件中的main.cpp文件时遇到一些问题

我的文件夹树是:

**mainfolder**
    |_main.cpp
    |_CMakeLists.txt
    |
    | **lib**
         |_**lib1**
              |_CMakeLists.txt
              |_liblib1.so
              |_**src**
                   |_lib1.cpp
              |_**include**
                   |_lib1.h
         |_**lib2**
              |_CMakeLists.txt
              |_liblib2.so
              |_**src**
                   |_lib2.cpp
              |_**include**
                   |_lib2.h
两个库的两个CMakeLists.txt非常相似,根据以下内容创建:

我的main.cpp文件是:

#include <stdio.h>
#include <stdlib.h>
#include <opencv2/opencv.hpp>
#include "lib/lib1/lib1.h"
#include "lib/lib2/lib2.h"

using namespace cv;

int main()
{
    printf("Executing main.cpp");

    lib1 lib1object;
    lib2 lib2object;

    for(;;)
    {

         lib1object.Analize(param1, param2);
         lib2object.Draw(param1, param2, param3);
    }
    return 0;
}
我真的很感谢你的帮助。谢谢

还有一件事。。。如果我将主文件夹/CMakeLists.txt的最后一行修改为:

target_link_libraries( main ${OpenCV_LIBS} LibraryLib1 LibraryLib2)
如果LibraryLib1和LibraryLib2是两个库项目的名称,我获得:

/usr/bin/ld: unable to find -lLibraryLib1
/usr/bin/ld: unable to find -lLibraryLib2

库和主文件有单独的项目。因此,主文件不知道其他项目的目标名称。最简单的解决方案(因为所有内容都在一个源代码树中)是只有一个项目

因此,使用
add_子目录
直接在主项目中构建库:

cmake_minimum_required(VERSION 2.8)
project( MyProject C CXX )
add_subidrectory(lib/lib1)
add_subidrectory(lib/lib2)
find_package( OpenCV REQUIRED )
add_executable( main main.cpp )
target_link_libraries( main ${OpenCV_LIBS} LibraryLib1 LibraryLib2)

这确保了目标名称是已知的。这假设您在子文件夹中有调用,如
add\u library(LibraryLib1…
。否则,请适当交换名称。

可能与StackOverflow的欢迎重复。是否可以添加收到的错误消息?看起来您缺少
include\u目录(${OpenCV\u include\u DIRS})
。问题与OpenCV无关……我只需要知道如何包含这两个函数的目录。因此,我的主文件能够找到Analize和Analize这两个函数Draw@languitar这两个库是按照中的建议创建的,后请提供一个最小的工作示例(
CMakeLists.txt
)这再现了您在自己的库中看到的错误。没有这些很难说。嗨,Langitar,首先感谢您的回答……它工作正常……我现在的问题是:如果我修改main.cpp,它会重新编译所有库?因为我希望在不重新编译未修改的文件的情况下加快进程(以库为例)不,CMake会处理这个问题。如果这个答案对你有效,你能接受吗?另一个问题:如果我想将这两个库编译为静态库而不是动态库,我需要更改什么?
/usr/bin/ld: unable to find -lLibraryLib1
/usr/bin/ld: unable to find -lLibraryLib2
cmake_minimum_required(VERSION 2.8)
project( MyProject C CXX )
add_subidrectory(lib/lib1)
add_subidrectory(lib/lib2)
find_package( OpenCV REQUIRED )
add_executable( main main.cpp )
target_link_libraries( main ${OpenCV_LIBS} LibraryLib1 LibraryLib2)