1. 程式人生 > >用makefile編譯生成.a檔案(linux靜態庫),並編譯進可執行檔案中

用makefile編譯生成.a檔案(linux靜態庫),並編譯進可執行檔案中

檔案列表:
這裡寫圖片描述

程式碼檔案

/* 下列程式碼儲存到 plus.cpp */

int my_plus(int x,int y)  
{  
    return x + y;  
}  
/* 下列程式碼儲存到 minus.cpp */
int my_minus(int x,int y)  
{  
    return x - y;  
}  
/* 下列程式碼儲存到 my_math.h */
int my_plus(int x,int y); 
int my_minus(int x,int y);
/* 下列程式碼儲存到 lib_test.cpp */
#include"my_math.h"  
#include<stdio.h> int main() { printf("[my_plus ] = %d\n",my_plus(3,5)); printf("[my_minus] = %d\n",my_minus(3,5)); return 0; }

makefile檔案

/* 下面內容儲存到 lib.mak */
SHELL = /bin/sh  
CC = g++
AR = ar  

CFLAG = -O2 -W -Wall  

INCLUDE_PATH = -I.  
LIB_TARGET = ./libmath.a  
PLUS_OBJ = plus.o  
PLUS_SRC = ./plus.cpp  

MIN_OBJ = minus.o 
MIN_SRC = ./minus.cpp

all : $(
LIB_TARGET) $(PLUS_OBJ): $(PLUS_SRC) $(CC) $(CFLAG) $(INCLUDE_PATH) -c $(PLUS_SRC) $(MIN_OBJ): $(MIN_SRC) $(CC) $(CFLAG) $(INCLUDE_PATH) -c $(MIN_SRC) $(LIB_TARGET) : $(PLUS_OBJ) $(MIN_OBJ) $(AR) cq [email protected] $^ rm -f $(PLUS_OBJ) rm -f $(MIN_OBJ) clean: rm -f $(
PLUS_OBJ) rm -f $(LIB_TARGET)
/* 下面內容儲存到 app.mak */
SHELL = /bin/sh  
CC = g++  

INCLUDE_PATH = -I.  
TEST_TARGET = ./test  
TEST_SRC = ./lib_test.cpp  
LDFLAGS := ./libmath.a  
all :
    $(CC) -g $(TEST_SRC) $(LDFLAGS) -o $(TEST_TARGET) $(INCLUDE_PATH)  

clean:
    rm -f $(TEST_TARGET)

編譯連線

編譯生成靜態庫
在linux終端使用命令:

make -flib.mak

效果如下圖
這裡寫圖片描述

編譯生成可執行檔案
使用命令:

make -fapp.mak

效果如下圖
這裡寫圖片描述

執行:
這裡寫圖片描述

相關推薦

makefile編譯生成.a檔案linux靜態編譯執行檔案

檔案列表: 程式碼檔案 /* 下列程式碼儲存到 plus.cpp */ int my_plus(int x,int y) { return x + y; }

Linux自動備份檔案linux計劃任務

今天有人讓我給寫個指令碼,說是讓linux定時備份資料和資料,每次備份的資料檔名不一樣,並刪除超過一定時期的資料,這個聽起來挺有意思的,具體看下面吧: 1,寫一個指令碼backup.sh內容如下 #!/bin/sh cp -r /home/..../data /tm

C#程序調cmd.exe執行其他exe並且含多個參數程結果返回給字符串

() stat syntax || 錯誤 void dia clas ring 1.關鍵代碼部分。 using System.Diagnostics; public class CmdHelper {

C++讀寫XML檔案使用tinyxml

使用以下程式碼之前,需要下載TinyXml庫,幷包含到工程下 #include <stdio.h> #include "tinyxml.h" #include <iostream> #include <cstring> usin

查詢MDB高程點的高程值有0值的圖幅遊標遍歷查詢某個欄位的值將查到的結果寫入到TXT

1、 mdbs = arcpy.ListWorkspaces("*","Access") 2、 FeatureClasses = arcpy.ListFeatureClasses() 3、 Fields = arcpy.ListFields(FeatureClass) 4、 cursor =

C/C++從鍵盤讀入連續輸入的資料以回車結束將資料存入連結串列。

  要求新建一個連結串列,連結串列從鍵盤讀取一組連續輸入的資料,每個資料之間以一個空格分隔,當遇到換行符時,停止讀取。   下面是自己總結的比較簡單的實現方法。 C: #include <stdio.h> typedef struct ListNode *node; s

【原創原始碼】批量儲存圖片到一定數量後新建資料夾繼續儲存檔名不重複記錄圖片的ID、url地址以及名稱

最近寫的一小段程式碼,具體實現的功能如下: 1.反覆讀取本地一張圖片,使用opencv更改其大小為112*112 2.使用GUID給圖片命名(保證圖片名稱不會重複) 3.建立資料夾,每個資料夾存放400個圖片,滿400後建立新的資料夾(以時間命名)繼續存放...以此類推 4.記錄每張

java專案到處jar包轉成.exe執行檔案

需要使用的工具: eclipse,exe4j,iocFx2(製作ico圖示) 具體轉換步驟分為兩步: 一、將java專案到處成jar包; 二、將匯出的jar包轉換成exe可執行檔案; 步驟一:將jav

Ubuntu14.04 apache2 配置 CGI(測試:shell,執行檔案,python)

#PS:要轉載請註明出處,本人版權所有 #PS:這個只是 《 我自己 》理解,如果和你的 #原則相沖突,請諒解,勿噴 環境: 59~14.04.1-Ubuntu SMP Tue Jul 7 15:07:27 UTC 2015 apache

Android程式內嵌ELF執行檔案-- Android開發C語言混合程式設計總結

前言 都知道的,Android基於Linux系統,然後覆蓋了一層由Java虛擬機器為核心的殼系統。跟一般常見的Linux+Java系統不同的,是其中有對硬體驅動進行支援,以避開GPL開源協議限制的HAL硬體抽象層。 大多數時候,我們使用JVM語言進行程式設計,比如傳統的Java或者新貴Kotlin。碰到對

linux執行應用程式not found問題交叉編譯生成執行檔案

[email protected]:~/Desktop/em35x-ezsp$readelf -a build/ZigBee/ZigBee |grep NEEDED  0x00000001 (NEEDED)                     Shared library: [libreadli

linux 下怎麼編譯生成a.out檔案

編輯儲存原始檔後 在shell中執行  gcc  test.c   如果沒有編譯錯誤,gcc會在當前目錄下生成一個a.out檔案, 然後可以   ./a.out     結果出來了 當然你也可以使用 –o 選項給生成的檔案起一個別的名字,像 gcc test.c –o

Makefile 編譯生成多個執行檔案

all:server client server:server.c gcc $< -o [email protected] client:client.c gcc $< -o [email protected] clean:   &nb

Linux C 源程式 編譯連線生成 執行檔案

源程式 test.c第一種 ,編譯 gcc -c test.c -o test.o              連線 gcc -o test test.o第二種。              編譯連線              gcc -o test test.c執行    ./

在Windows平臺visual studio編譯執行檔案部署時報:應用程式無法正常啟動0xc000007b跟DirectX9無關的原因

最近在做EasyDarwin開源流媒體伺服器Windows版本編譯與部署時發現一個問題,在開發機本機執行都很正常,但是部署到目標機器(未安裝vs等開發環境)時,莫名其妙報出了“應用程式無法正常啟動0xc000007b”的錯誤,網上搜了一遍,大多數解決方案和部落格

android studio ndk-build 編譯C生成.so檔案ndk基礎篇

一、概要 最近專案需要,要把程式碼中加密的部分打包成so檔案,剛開始接觸的時候真是痛苦呀,網上好多資料,都不是很詳細,步驟也不清晰,所以我整理了一下,希望大家喜歡。 現在android studio打包so檔案有兩種方式,第一種是ndk-build編譯專案,還有一種用

Linux:基礎IO檔案描述符分配規則重定向inode軟硬連結動態靜態

目錄 檔案描述符的分配規則 重定向原理 FILE 總結 理解檔案系統 inode是什麼 inode內容 硬連結 軟連結 軟硬連結區別: 動態庫和靜態庫 如何生成自己的動態庫和靜態庫 如何連結一個庫生成可執行程式 檔案描述符的分配規則 最

[PYTHON]_ELVE_Python原始碼檔案編譯執行檔案支援macOS High Sierra和window 10

#0x01 背景 這兩天寫了一個抽獎的Python指令碼,要生成可執行檔案,總不能一直在sublime上執行吧,或者執行前先安裝Python,所以就查了一下怎麼生成可執行檔案,本篇包括mac下和win下,經本人測試,mac下生成.app(mac下的可執行檔案為.app字尾)較win下容易一些。 我用的Py

QtEmbedded-4.8.6-arm 編譯選擇從 動態變化到靜態生成Makefile連結路徑下如果有動態靜態優先選擇動態編譯應用

問題:QtEmbedded-4.8.6-arm 編譯選擇從 動態庫到靜態庫 時,發現的一個疑惑:,生成的Makefile連結庫路徑下如果有動態庫和靜態庫,優先選擇動態庫編譯應用 具體現象: 我最初是使用動態庫的 QtEmbedded-4.8.6-arm (編譯器選擇時,是 ./co

VS2010靜態編譯生成.exe執行檔案

VS2010靜態編譯生成的.exe可執行檔案,可以免安裝在其他電腦直接執行   靜態編譯:就是在編譯可執行檔案的時候,將可執行檔案需要呼叫的對應動態連結庫(.so)中的部分提取出來,連結到可執行檔案中去,使可執行檔案在執行的時候不依賴動態連結庫。     編譯方式: 第1種: