国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫

這篇具有很好參考價值的文章主要介紹了cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


?項目中會有單個源文件構(gòu)建的多個可執(zhí)行文件的可能。項目中有多個源文件,通常分布在不同子目錄中。這種實踐有助于項目的源代碼結(jié)構(gòu),而且支持模塊化、代碼重用和關(guān)注點分離。同時,這種分離可以簡化并加速項目的重新編譯。

靜態(tài)庫

準備的文件

add.h

int add(int a,int b);

add.cpp

int add(int a,int b)
{
    return a+b;    
}

main.cpp

#include "add.h"
#include <iostream>
int main()
{
    int a = 3,b = 4;
    std::cout<<add(3,4)<<std::endl;
    return 0;    
}

CMakeLists文件

cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫,cmake,c++,c++
?首先這是我們的目錄結(jié)構(gòu)。我們需要先編譯靜態(tài)庫,所以我們會在外層的CMakeLists.txt文件中先編譯add文件夾中的靜態(tài)庫。
所以外層CMakeLists.txt文件的內(nèi)容為:

add_subdirectory(add)

add文件夾中的CMakeLists.txt文件

add_library(add_static add.cpp)

?add_library(add_static STATIC add.cpp):生成必要的構(gòu)建指令,將指定的源碼編譯到庫中。add_library的第一個參數(shù)是目標名。整個CMakeLists.txt中,可使用相同的名稱來引用庫。生成的庫的實際名稱將由CMake通過在前面添加前綴lib和適當?shù)臄U展名作為后綴來形成。生成庫是根據(jù)第二個參數(shù)(STATIC或SHARED)和操作系統(tǒng)確定的。

使用靜態(tài)庫

?接下來我們需要在外層main.cpp文件中使用該靜態(tài)庫。

add_subdirectory(add)

include_directories(./lib)
add_executable(lesson2_1 main.cpp)
target_link_libraries(lesson2_1 ${CMAKE_CURRENT_SOURCE_DIR}/lib/add_static.lib)

?target_link_libraries(lesson2_1 ${CMAKE_CURRENT_SOURCE_DIR}/lib/add_static.lib): 將庫鏈接到可執(zhí)行文件。此命令還確??蓤?zhí)行文件可以正確地依賴于靜態(tài)庫。因此,在靜態(tài)鏈接到可執(zhí)行文件之前,需要完成靜態(tài)庫的構(gòu)建。
?我們先把編譯好的靜態(tài)庫和頭文件放到lib文件夾下。
cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫,cmake,c++,c++
最后的編譯結(jié)果。
cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫,cmake,c++,c++

動態(tài)庫

準備的文件

add.cpp

#include <iostream>
#include "export.h"

CMAKE_STUDY_API int add(int a,int b)
{
    return a+b;    
}

add.h

#include "export.h"
CMAKE_STUDY_API int add(int a,int b);

export.h

#pragma once

#ifdef EXPORT
#define CMAKE_STUDY_API __declspec(dllexport)
#else
#define CMAKE_STUDY_API __declspec(dllimport)
#endif

main.cpp

#include "add.h"
#include <iostream>
int main()
{
    int a = 3,b = 4;
    std::cout<<add(3,4)<<std::endl;
    return 0;    
}

CMakeLists文件

cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫,cmake,c++,c++
以上為目錄結(jié)構(gòu)
?與靜態(tài)庫一樣,我們都需要先編譯動態(tài)庫,然后再編譯可執(zhí)行文件。
所以我們外部的CMakeLists.txt文件為:

add_subdirectory(add)

add文件夾下的CMakeLists.txt文件為:

add_library(add_shared SHARED add.cpp)
target_compile_definitions(add_shared PRIVATE EXPORT)

由于在windows下的動態(tài)庫需要有宏定義來指定動態(tài)庫是導出還是導入。
cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫,cmake,c++,c++
target_compile_definitions(add_shared PRIVATE EXPORT)主要是用來定義該動態(tài)庫有個自定義的宏EXPORT。

使用動態(tài)庫

?與靜態(tài)庫不同,在windows下我們生成的動態(tài)庫會有一個lib文件和一個dll文件,lib文件是動態(tài)庫函數(shù)的導出符號文件。
外部的CMakeLists.txt文件:

add_subdirectory(add)

include_directories(./lib)
add_executable(lesson2_2 main.cpp)
target_link_libraries(lesson2_2 ${CMAKE_CURRENT_SOURCE_DIR}/lib/add_shared.lib)

cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫,cmake,c++,c++
我們先把頭文件和lib文件都拷貝到lib文件夾下。
然后再把生成的dll文件拷貝到生成的可執(zhí)行文件的目錄下。否則會出現(xiàn)缺失dll文件的錯誤。
cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫,cmake,c++,c++
cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫,cmake,c++,c++
最后的執(zhí)行結(jié)果。

使用OpenCV庫

?我們先從官網(wǎng)上下載OpenCV的庫。
cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫,cmake,c++,c++
main.cpp

#include<iostream>

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

int main(int argc, char** argv)    
{                                  
	Mat image;
	image = imread("C:/cmake_study/lesson2_opencv/1.jpeg");
	if (image.data == nullptr)
	{
		//cout <<"圖片不存在" << endl;
	}
	else
	{
		imshow("meinv", image);
		waitKey(0);
	}

	//cout << "圖像寬為:" << image.cols << "\t高度為:" << image.rows << "\t通道數(shù)為:" << image.channels() << endl

	system("pause");
	return 0;
}

CMakeLists.txt文件

include_directories(C:/3rd/opencv/build/include)
add_executable(lesson2_opencv main.cpp)
target_link_libraries(lesson2_opencv "C:/3rd/opencv/build/x64/vc16/lib/opencv_world480d.lib")

我們只需要指定OpenCV的lib文件的路徑和頭文件即可,最后將dll文件拷貝到可執(zhí)行文件的目錄下。
cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫,cmake,c++,c++文章來源地址http://www.zghlxwxcb.cn/news/detail-820280.html

到了這里,關(guān)于cmake-動態(tài)庫和靜態(tài)庫及使用OpenCV第三方庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ESP32工程中CMake使用及加入第三方SDK庫文件

    ESP32工程中CMake使用及加入第三方SDK庫文件

    ? ? ? ? 本文中使用的是樂鑫官方推出的 ESP-IDF v5.1 對 ESP32S3 設(shè)備開發(fā),并非是Arduino、Micro-python等第三方工具開發(fā)。在ESP-IDF框架中,樂鑫官方已經(jīng)將 CMake 和 Ninja 編譯構(gòu)建工具 集成到了ESP-IDF中。 ????????ESP-IDF 即樂鑫物聯(lián)網(wǎng)開發(fā)框架,可為在 Windows、Linux 和 macOS 系統(tǒng)平臺

    2024年02月20日
    瀏覽(99)
  • 動態(tài)庫和靜態(tài)庫的使用

    動態(tài)庫和靜態(tài)庫的使用

    庫是一種可執(zhí)行代碼的二進制形式,可以被操作系統(tǒng)載入內(nèi)存執(zhí)行。就是將源代碼轉(zhuǎn)化為二進制格式的源代碼,相當于進行了加密,別人可以使用庫,但是看不到庫中的內(nèi)容。 常見的庫類型 共享庫 靜態(tài)庫 動態(tài)庫 win32平臺下,靜態(tài)庫通常后綴為.lib,動態(tài)庫為.dll 。 linux平臺下

    2024年02月03日
    瀏覽(14)
  • 【Linux】如何打包成動靜態(tài)庫,第三方動靜態(tài)庫如何使用?

    庫的名稱:去掉前面的 lib 去掉后面的 .a(版本號) .so(版本號) 剩下的,才是庫正真的名稱。 查看文件依賴庫: ldd r : replace (更新替換) c:create (建立) 使用 gcc -fPIC 創(chuàng)建 .o 文件 (PIC)position ignoring code 與位置無關(guān)碼 用 gcc -shared 打包 .o 文件 -shared 共享庫 / 動態(tài)庫 當我們有

    2024年02月14日
    瀏覽(29)
  • arduino怎么導入第三方庫和官方庫

    arduino怎么導入第三方庫和官方庫

    一. 導入第三方庫文件 # 找到arduino安裝程序選的安裝位置,例如如果是下面的位置的話 # 那就在D:softwareArduino下找到libraries ?# 然后再把下載的第三方庫文件移動到里面,比如我下載了一個I2Cdev的三方庫 # I2Cdev里的文件是這樣的: ?# 然后你就能在arduino的加載庫找到,找不到的可

    2024年02月12日
    瀏覽(20)
  • 輕松精通PyCharm:高效管理第三方庫和虛擬環(huán)境

    輕松精通PyCharm:高效管理第三方庫和虛擬環(huán)境

    ??在pycharm中安裝第三方庫的方法有多種,下面我會詳細介紹其中一種, 在終端進行安裝 ,操作簡單,且成功率高。并且,我會詳細介紹,如何在pycharm的虛擬環(huán)境中安裝第三方庫,以及 如何提高安裝速度 。 ??本文用的工具是PyCharm 2021.3.3,專業(yè)版。 如果工具版本不同,

    2024年01月16日
    瀏覽(20)
  • Linux中靜態(tài)庫和動態(tài)庫的使用

    Linux中靜態(tài)庫和動態(tài)庫的使用

    介紹: 庫是一個二進制文件,包含的代碼可被程序調(diào)用 標準C庫、數(shù)學庫、線程庫… 庫有源碼,可下載后編譯;也可以直接安裝二進制包 位置一般放在:/lib /usr/lib 庫的知識 庫是事先編譯好的,可以復用的代碼 在os上運行的程序基本上都要使用庫,使用庫可以提高開發(fā)效率

    2024年01月25日
    瀏覽(28)
  • Qt Creator導入第三方so庫和jar包——Qt For Android

    Qt Creator導入第三方so庫和jar包——Qt For Android

    之前了解了在Android Studio下導入so庫和jar包,現(xiàn)在實現(xiàn)如何在Qt上導入so庫和jar包。 下面是我安卓開發(fā)(需調(diào)用安卓接口的代碼)的目錄(圖1),此目錄結(jié)構(gòu)和原生態(tài)環(huán)境(Android Studio)下開發(fā)的結(jié)構(gòu)很相似: 圖1 在Qt? Creator上導入so庫和jar包,比在Android Studio上簡單很多,只需

    2024年04月29日
    瀏覽(87)
  • 詳解Linux下靜態(tài)庫/動態(tài)庫的生成和使用(含代碼示例和操作流程)&&動態(tài)庫和靜態(tài)庫的區(qū)別

    詳解Linux下靜態(tài)庫/動態(tài)庫的生成和使用(含代碼示例和操作流程)&&動態(tài)庫和靜態(tài)庫的區(qū)別

    關(guān)于gcc的使用方法可以參考下方鏈接博客: Linux下詳解gcc編譯過程(含代碼示例) gcc使用教程 庫是一種組件技術(shù)。 庫里封裝了數(shù)據(jù)和函數(shù),提供給用戶程序調(diào)用。 庫只執(zhí)行到第三階段編譯,沒有鏈接。 庫的使用可以使程序模塊化,提高程序的編譯速度,實現(xiàn)代碼復用。

    2024年02月15日
    瀏覽(33)
  • CMake Install 安裝第三方依賴庫

    cmake 提供 install 命令來安裝文件,方便打包。但是有時也會對第三方依賴庫有需求一起打包,在不確定第三方庫dll文件路徑和名稱的情況下,需要另一種方式來打包了。 比如想要打包opencv_world.dll,一般cmake依賴opencv的方式是通過第三方軟件包(* -config.cmake)的方式: 那么在

    2024年02月14日
    瀏覽(98)
  • 【cmake學習】cmake 引入第三方庫(頭文件目錄、庫目錄、庫文件)

    【cmake學習】cmake 引入第三方庫(頭文件目錄、庫目錄、庫文件)

    程序的編寫需要用到頭文件,程序的編譯需要lib文件,程序的運行需要dll文件,因此cmake引入第三方庫其實就是將include目錄、lib目錄、bin目錄引入工程。 ????????目錄 1、find_package(批量引入庫文件和頭文件) 2、include_directories(引入頭文件目錄) 3、link_directories(引入庫

    2024年02月09日
    瀏覽(89)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包