1. 程式人生 > >CMake簡介,打包so檔案,編譯實際專案 用valgrind測記憶體情況

CMake簡介,打包so檔案,編譯實際專案 用valgrind測記憶體情況

開發十年,就只剩下這套架構體系了! >>>   

CMake簡介和使用示例   

 

CMake是常用的跨平臺編譯器。影象這塊在給服務端做開發時,常有兩個需求:

 (1)程式碼打成.so包,供別人呼叫;

 (2)編譯、測試,用valgrind測記憶體情況。

工程較大時,藉助CMake完成很方便。下面分別給出兩種情況下,CMakeLists.txt的簡單示例。

 

1. 藉助CMake打.so包

 把目錄utils下的檔案打出.so包。

%hmqfua%60i

其中CMakeLists.txt內容:

 

 

cmake_minimum_required(VERSION 2.8)

aux_source_directory(. utils_src)

add_library(utils SHARED ${utils_src})

set_target_properties(utils PROPERTIES output_name "utils")

注意:前面的關鍵字可以大寫也可以小寫,括號內的關鍵字必須大寫。

 

編譯:

 

 

cmake .

make

 

生成了共享庫libutils.so

 

2. 編譯實際的專案

專案sticker_me中檔案結構如下,其中build目錄用於生成編譯的結果。

 

CMake簡介和使用示例 - 淮靜 - 淮靜的部落格

 

它們之間的呼叫關係如下:

 

CMake簡介和使用示例 - 淮靜 - 淮靜的部落格

 

各個CMakeLists.txt如下:

./CMakeLists.txt:

 

 

cmake_minimum_required(VERSION 2.8)

project(sticker_me)

add_subdirectory(src)

add_subdirectory(facedetect)

add_subdirectory(utils)

 

src/CMakeLists.txt:

 

 

find_package(OpenCV REQUIRED)

include_directories(facedetect utils)

aux_source_directory(. src_dir)

add_executable(sticker_me ${src_dir})

target_link_libraries(sticker_me ${OpenCV_LIBS} utils facedetect)

 

facedetect/CMakeLists.txt:

 

 

include_directories(utils) 
aux_source_directory(. facedetect_dir) 
add_library(facedetect SHARED? ${facedetect_dir}) 
set_target_properties(facedetect PROPERTIES output_name "facedetect") 
target_link_libraries(facedetect utils)

utils/CMakeLists.txt:

 

 

aux_source_directory(. utils_dir) 
add_library(utils SHARED ${utils_dir}) 
set_target_properties(utils PROPERTIES output_name "utils") 

 

編譯:

 

 

cd build

cmake ..

make

 

 

藉助valgrind測試記憶體,log重定向到檔案log.txt中:

 

 

cd build/src 
valgrind --leak-check=full --log-file=log.txt ./sticker_me

 

參考:

cmake_百度百科

CMake wiki

CMake快速入門教程:實戰

cmake 學習筆記(一)

相關推薦

CMake簡介打包so檔案編譯實際專案 valgrind記憶體情況

開發十年,就只剩下這套架構體系了! >>>   

linux下gcc編譯 .c檔案生成動態連結庫 .so檔案並測試呼叫該連結庫

簡單介紹:linux中so檔案為共享庫,和windows下dll相似;so可以共多個程序呼叫,不同程序呼叫同一個so檔案,所使用so檔案不同;so原檔案不需要main函式;例項,1.通過mysqlTest.c中的函式mysql(),生成一個libmysql.so連結庫#inc

Linux編譯.so檔案呼叫.so檔案

首先使用下面指令生成libst.o gcc -c -fPIC libst.c //-f後面跟一些編譯選項,PIC是其中一種,表示生成位置無關程式碼(Position Independent Code) 然後用 gcc -shared -fPIC -o l

Windows下編譯使用Android NDK呼叫SO檔案

下載後把壓縮包解壓出來,例如:D:\ndk,目錄下的ndk-build.cmd就是用來編譯的批處理命令。 這裡以D:\ndk\samples\hello-jni為例,開啟D:\ndk\samples\hello-jni\jni\hello-jni.c檢視程式碼: /* * Copyri

打包tfrecord檔案並讀取

Tfrecord檔案是tensorflow專門設計的一種訓練樣本儲存格式,將訓練樣本打包成tfrecord格式後能夠加快檔案的讀取效率。所以訓練網路的第一步就是將自己的訓練集樣本打包生成tfrecord格式。本文主要介紹兩種tfrecord打包方式,這兩種方式的主要區別在於生

ijkPlayer支援https和增加沉浸式帶有so檔案EXOplayer升級到r.2.8.4

QQ交流群:611902811,有興趣的可以交流 IJKPlayer-android 優勢: 對ijkplayer的抽取值刪除了IjkVideoView.java類中幾個無關緊要的變數和方法,其他與ijkplayer本身一摸一樣。這樣ijkplay

Spring boot 專案分環境 Maven 打包動態配置檔案動態配置專案

Spring boot Maven 專案打包 使用Maven 實現多環境 test dev prod 打包 專案的結構 在下圖中可用看出,我們打包時各個環境需要分開,採用 application-環境.yml 的方式命名 環境配置開始 首先我們需要在app

Intellij打包jar檔案“java.lang.SecurityException: Invalid signature file digest for Manifest main attrib

下面是使用Intellij 打包jar檔案的步驟,之後會有執行jar檔案時遇到的錯誤。 打包完成。 ========================================================================== 執行jar出現問

Modelsim 模擬時在do檔案新增編譯某個檔案的語句

    -y ../ecp3 +libext+.v\               //這句用於編譯ecp3資料夾中的.v檔案,如果模擬時找不到該資料夾,路徑新增詳細。 +incdir+ ../models/mem  \               //開啟某資料夾。 修

條件編譯標頭檔案靜態庫共享庫與多檔案程式設計

本文轉自嵌入式Linux中文站 條件編譯 條件編譯即滿足某些條件的時候編譯某部分程式碼,常用於開發多個版本的程式,當滿足條件A時,編譯出免費版本的軟體,當滿足條件B時,編譯除vip版本的軟體,可以提高程式碼的複用率。條件編譯使用"預處理命令+巨集定義"來實現,更多巨集

android反編譯APK後是smali檔案能反編譯成dex檔案

我也面臨相同的問題,但目前還沒找到類似反編譯smali檔案的方法,一般得到dex檔案只需要用WinRAR或其他壓縮軟體開啟apk檔案就能得到。但也有例外好像,技術先進了,今天遇到個apk用WinRAR開啟異常,沒有dex檔案,所以得到原始碼的計劃就泡影了,至少用目前常規的方

IDEA編寫wordcount讀取hdfs檔案執行在Spark叢集例子

前期:已安裝好hadoop叢集和spark叢集,hadoop2.6.5,spark2.3.1,jdk1.8. scala2.1.0 第一步:在idea編寫scala程式,並且要打包(pom檔案的build標籤中配置好maven打包程式碼,可以定義主類也可以在提交的時候再定義){補充:可以在s

C語言 檔案大小分配空間讀入檔案寫入檔案實現複製的功能

首先通過兩種方法得到檔案的大小,位元組為單位,根據這個大小使用malloc分配固定的空間buffer,二進位制流讀入檔案,把二進位制流寫入buffer中,buffer輸出寫入到新的檔案。 原始檔1.txt,輸出檔案1.txt.txt 環境為Ubuntu 16.04,gcc #incl

django設定並獲取cookie/session檔案上傳ajax接收檔案post/get請求及跨域請求等的方法

django設定並獲取cookie/session,檔案上傳,ajax接收檔案等的方法: views.py檔案: from django.shortcuts import render,HttpResponse,redirect import datetime import json from

C#如何操控FTP獲取FTP檔案或資料夾列表獲取FTP檔案大小FTP上傳FTP刪除檔案FTP新建資料夾、刪除資料夾

C#如何操控FTP 出處:http://www.cnblogs.com/rond/archive/2012/07/30/2611295.html,http://www.cnblogs.com/rond   關於FTP的應用免不了要對FTP進行增刪查改什麼的。通過搜尋,整理和修改

redis安裝修改配置檔案多例項部署 redis-server

redis 安裝 解壓: [[email protected] software]# tar -xvf redis-3.2.11.tar.gz 進入redis根目錄: [[email protected] software]# cd redis-3.2.11/ 編譯安裝: [[

ubuntu 掛載硬碟時只能讀取檔案不能寫入的解決辦法

最近用自己的硬碟當做儲存工具,突然發生了問題,就是隻能看硬盤裡的資料卻無法修改或者複製內容,查了好多辦法都不行,最後看到我掛載硬碟時,硬碟資料夾出現×號,這才想起來可能由於許可權問題,被設定為只讀模式,所以解決辦法自然就是給許可權啊: 1    pwd檢視硬碟的

(單機demo)將一個專案靜態原型部署到nginx上面修改hosts檔案使用域名訪問專案

(單機demo)將一個專案部署到nginx上面,修改hosts檔案,使用域名訪問專案 安裝nginx,網上教程一大推,就不囉嗦了 進入nginx修改nginx安裝目錄下的nginx.conf檔案,新增如下內容 修改alias 後面靜態資源的位置,修改server_name

初識flask上傳檔案uwsgi部署

安裝: pip install flask web開發: app.py from flask import Flask,request,make_response from flask import jsonify app = Flask(__name__) UPLOAD_FOL

爬取LeetCode資料生成README檔案美化GitHub倉庫

專案地址:LeetCodeCrawler 概述   現在一般或多或少都會在LeetCode上面進行刷題練習,然後將程式碼放在GitHub上,當然我也一樣,這是我的刷題倉庫Algorithm。刷完題如果每次都去重新編輯README.md檔案進行更新,未免顯得有些費時,因此有了需求,個人就