Opencv C++;将两个共享库链接到main.cpp
我在尝试将两个共享库链接到cmake文件中的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
**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)