automake編寫完整的專案---動態庫+可執行檔案
上一篇部落格automake簡介中簡單的介紹了automake的使用流程,但是真正的專案肯定是很複雜的,包含不同的目錄,有的生成動態庫,有的是可執行檔案,本文就用一個簡單的opencv專案來介紹一下automake在大型專案的使用方法。本文中,最外層包含兩個目錄,一個目錄是src,裡面是不同模組的原始檔,最後是要生成動態庫的;一個目錄是sample,裡面是一個應用程式,呼叫src中的動態庫生成可執行檔案,而src中又包含了不同的目錄,每個子目錄最後生成一的so動態庫,具體如下:其中,smooth、sharpen、segment分別生成三個動態庫,而processManage則呼叫他們三個也生成一個動態庫,最後sample中的main函式呼叫processManage提供的介面間接的呼叫smooth、sharpen、segment三個動態庫實現一個應用程式:
具體步驟如下:
1、在最外層目錄(和src、sample在同一級)執行autoscan命令生成autoscan.log和configure.scan檔案
2、mv configure.scan configure.ac且修改configure.ac(早期使用configure.in)
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.68]) AC_INIT(segment, 1.0, email) AM_INIT_AUTOMAKE(segment,1.0) #手動新增 AC_CONFIG_SRCDIR([sample/segment.cpp]) #用於檢測原始碼目錄的有效性,任選一個原始碼檔案即可 AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_CXX AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CONFIG_FILES([Makefile src/Makefile src/smooth/Makefile src/sharpen/Makefile src/segment/Makefile src/processManage/Makefile sample/Makefile]) #需要生成的所有Makefile AC_OUTPUT
3、使用aclocal生成aclocal.m4檔案
4、執行autoconf命令生成configure檔案
5、執行autoheader命令生成config.h和config.h.in
6、在每一個需要生成Makefile的目錄裡建立Makefile.am檔案
6.1:如果是父目錄(和src、sample在同一級),則必須包含SUBDIRS = src sample (注意順序),相當於呼叫子目錄去生成Makefile,如果沒有其它的操作,則只有這一行即可.同理,src中的(和smooth、sharpen、segment、processManage同一級的)Makefile.am也只有一行,即
INCLUDES = `pkg-config opencv --cflags` -I./ #標頭檔案的目錄
projectlibdir=$(libdir)
projectlib_PROGRAMS = libsmooth.so #動態庫的名字
libsmooth_so_SOURCES = GaussSmooth.cpp MedianSmooth.cpp GaussSmooth.h Smooth.h
libsmooth_so_LDFLAGS = -shared -fpic #GCC編譯動態庫的選項
上面巨集的具體含義,參考上一篇部落格的表格
對於processManage中的Makefile.am,由於呼叫了另外三個so,所以稍微有點不同,具體如下:
INCLUDES = `pkg-config opencv --cflags` -I../smooth/ -I../sharpen -I../segment/ -I./
projectlibdir = $(libdir)
projectlib_PROGRAMS = libmanage.so
libmanage_so_SOURCES = processManage.cpp processManage.h
libmanage_so_LDFLAGS = -shared -fpic #GCC編譯動態庫的選項
libmanage_so_LDADD= -L../smooth/ -L../sharpen/ -L../segment/ -lsmooth -lsharpen -lsegment #依賴的庫
最後是sample中可執行檔案的Makefile.am,具體如下:
AUTOMAKE_OPTIONS = foreign
INCLUDES=`pkg-config opencv --cflags` -I../src/processManage/ -I../src/smooth/ -I../src/sharpen/ -I../src/segment/ -I.
bin_PROGRAMS = segment
segment_SOURCES = segment.cpp
LIBS = `pkg-config opencv --libs`
segment_LDADD =-L../src/smooth/ -L../src/sharpen/ -L../src/segment/ -L../src/processManage/ -lsmooth -lsharpen -lsegment -lmanage
注意事項:由於GCC中依賴的動態庫必須放在-o引數的後面,所以`pkg-config opencv --libs`必須放到LIBS變數中,因為檢視後面生成的Makefile可以看到,_LDADD和_LIBS在-o的後面,而_LDFLAGS在-o的前面,而`pkg-config
opencv --libs`不能放到_LDADD中6.2:如果使用libtool生成動態庫,可以使用libtool生成可移植性的動態庫,生成的動態庫為.lo檔案,它會呼叫自己目錄下子目錄./libs/中的.so檔案,使用.lo檔案和使用.so檔案的方法類似,只是需要使用-lz引數,模版如下(下面用一個簡單的專案舉例):
AUTOMAKE_OPTIONS=foreign
lib_LTLIBRARIES=libhello.la #要生成的動態庫的名字
libhello_la_SOURCES=test.cpp #依靠的原始檔和標頭檔案,使用空格分開
此時的可執行檔案,模版如下:
AUTOMAKE_OPTIONS=foreign
INCLUDES= -I../include #依賴的標頭檔案目錄
bin_PROGRAMS=hello
hello_SOURCES=hello.cpp
hello_LDADD= -L../lib/ -lz ../lib/test.lo #依賴的庫檔案
7、如果要生成.lo動態庫,則libtoolize --automake --copy --force
8、touch NEWS README AUTHORS ChangeLog
9、執行automake --add-missing命令生成Makefile.in檔案
10、執行./configure 命令生成Makefile檔案
11、執行make && make install
相關推薦
automake編寫完整的專案---動態庫+可執行檔案
上一篇部落格automake簡介中簡單的介紹了automake的使用流程,但是真正的專案肯定是很複雜的,包含不同的目錄,有的生成動態庫,有的是可執行檔案,本文就用一個簡單的opencv專案來介紹一下automake在大型專案的使用方法。本文中,最外層包含兩個目錄,一個目錄是
cmake編譯靜態庫/動態庫/可執行檔案及測試demo
0.編譯 # cd build # cmake .. # make -j4 //test.c測試demo #include <stdio.h> int main(){ HelloFu
META-INF的編寫。eclipse打包jar可執行檔案
在打包我們的java工程檔案到一個.jar檔案的時候,有時候我們的工程檔案會引用別的lib這時候在打包的時候就需要我們自己來將這些類也打包進來,具體 的做法是: 1.先在工程檔案的根目錄下新建一個 lib 資料夾,將需要呼叫的一些檔案.jar檔案放到裡面。 2. 新建一個
VS程式設計,x86,x64,Any CPU在可執行檔案(EXE)或dll(動態連結庫)的區別:
Any CPU和x86的可執行檔案(EXE)或dll(動態連結庫)在32位和64位下的區別: 1、x86平臺編譯出來的exe(可執行檔案)或dll(動態連結庫)都是32位的 2、x64平臺編譯出來的exe(可執行檔案)或dll(動態連結庫)對應的則是64位的。 3、Any
Linux下檢視可執行檔案、動態庫的ELF頭等資訊
用法: readelf <option(s)> elf-file(s) 作用: 和Windows下的PE檔案類似,ELF檔案是linux系統下可執行檔案、動態庫檔案、靜態庫檔案的標準格式。有時候我們需要檢視ELF檔案的頭資訊,或者動態庫檔
ndk生成elf可執行檔案及動態庫檔案
Eclipse中安裝好adt外掛後,就可以通過Eclipse開發Android工程,然後網上下載一個ndk包並解壓,然後在Eclipse中填好ndk目錄,之後便可以使用ndk。ndk最主要的功能是為了實現Android 的jni,除此功能外還可通過ndk生成elf可執行檔
【C語言】【unix c】如何察看可執行檔案依賴哪些動態庫
5、如何察看可執行檔案依賴哪些動態庫: 【ldd 可執行檔案的名字】:列印程式或庫檔案所依賴的共享庫列表 舉例: tarena@ubuntu:~/day/day24$
【PE】Windows平臺下為可執行檔案或動態庫dll新增版本資訊
###Date: 2017/9/22 ###Author : SoaringLee 平常我們可以看到在Windows可執行檔案中,右鍵屬性中含有檔案版本,檔名稱和版本等資訊,本文講述怎麼新增這些
用工具軟體dumpbin.exe檢視可執行檔案或庫的動態庫依賴項
就可以看到以下的資訊:Microsoft (R) COFF/PE Dumper Version 12.00.21005.1 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file your-file.dll File
IntelliJ IDEA 把java專案匯出成可執行的jar
1.開啟IntelliJ IDEA 的Project structure 2.Project structure的相關配置 3.選中 Artifacts>JAP>From modules with dependencies 4.選擇1個有main方法的類做為啟動類,然
在一個Android專案裡面有兩個可執行檔案,如何實現呼叫方式
我的處理方式是: 用Intent+AndroidManifest.xml的方法: 此方法是用Intent和修改AndroidManifest.xml達成的。 就是在要引用的AndroidManifest.xml檔案裡面加入被引用那個專案的activity: <activity
Springboot中引入本地jar包,並通過maven把專案打成可執行jar包
最近把以往的老專案用SpringBoot進行了重構,老專案中有部分本地依賴包不是放在maven庫裡的,是本地開發直接引入,需要在mvn package的時候把本地依賴jar也打進可執行包中。 這種通用問題,在網上找了一圈卻沒發現什麼好的解決辦
徹底理解連結器:庫與可執行檔案
庫與可執行檔案 在連結器可操作的元素這一節中我們提到,連結器可以操作的最小單元為目標檔案,也就是說我們見到的無論是靜態庫、動態庫、可執行檔案,都是基於目標檔案構建出來的。目標檔案就好比樂高積木中最小的零部件。 給定目標檔案以及連結選項,連結器可以生成兩種庫,分別是靜
Java_Java專案如何生成可執行jar包、exe檔案
功能:為大家淺談如何通過eclipse將Java專案生成可執行jar包,以及如何通過exe4j把jar包弄成ext檔案; =》Java專案 1、Java專案生成jar包 (1)、“專案”右鍵->"Export..."匯出,彈出“匯出設定”視窗如下:
連結裝載與庫 第6章 可執行檔案的裝載與程序
可執行檔案的裝載與程序 在第一章中講到,程式直接使用實體記憶體地址有以下缺點: 地址空間不隔離。惡意程式可以很容易的改寫其他程式的資料。 記憶體使用效率低。一個程式需要執行時,需要將整個程式裝入記憶體之中。 程式執行地址的不確定。因為無法保證每次都將程式載入到相同
java專案到處jar包,轉成.exe可執行檔案
需要使用的工具: eclipse,exe4j,iocFx2(製作ico圖示) 具體轉換步驟分為兩步: 一、將java專案到處成jar包; 二、將匯出的jar包轉換成exe可執行檔案; 步驟一:將jav
微信小程式 新建專案並配置可執行的檔案目錄
新建專案 下載微信小程式開發者客戶端並開啟,選擇專案目錄和專案名稱,填入AppID,取消勾選快速啟動模板。 1. 新建全域性配置檔案 點選目錄左上角的+,新建字尾名為js, json, wxss(命名自定,如app.js)檔案,用
用arm-eabi-objdump命令檢視lib庫或可執行檔案的函式-地址對映資訊
source build/envsetup.shchoosecombo arm-eabi-objdump -d out/target/product/generic/system/bin/mediaserver >mediaserver.addr 將mediaser
java專案匯出為可執行jar包
工程名下單擊右鍵——export——java——runnable JAR file——browse設定路徑——finish 1.在eclipse左側的package explorer中找到要匯出的工程,此處以Test工程為例 2.單擊右鍵在出現的下拉選單中選擇expor
將Maven專案打包成可執行jar檔案和外種配置方式(引用第三方jar)
http://blog.csdn.net/zhangdaiscott/article/details/6911640 方法一. mvn assembly 或 mvn package (一個jar包) 把依賴包和自己專案的檔案打包如同一個jar包(這種方式對sp