Linux系統下多線程程序編譯makefile文件

2021-01-08 電子產品世界

在Linux下,編譯一個多線程的程序命令為:

本文引用地址:http://www.eepw.com.cn/article/201609/305140.htm

gcc -lpthread -o file file.c

在Linux下,用交叉編譯器編譯一個在uclinux下運行的多線程程序,makefile文件如下:

CFLAGS = -Wall -Os -Dlinux -D__linux__ -Dunix -D__uClinux__ -DEMBED

LDFLAGS =-Wl,-elf2flt

LOCAL_LIBS = /usr/local/arm-elf/lib/libpthread.a

CC = arm-elf-gcc

LD = arm-elf-gcc

TARGT = test

OBJ = $(TARGT).o

SRC = $(TARGT).c

all: $(TARGT)

%.o:%.c

$(CC) $(CFLAGS) -c $ -o $@

$(TARGT) :$(OBJ) $(LOCAL_LIBS)

$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LOCAL_LIBS) $(LDLIBS)

clean:


相關焦點

  • linux中的makefile
    在linux中gcc一次只能編譯一個目標。對於大型項目,效率太低。因此引入linux中一個重要的編譯工具makefile,相當於在一個文本文件中,指定程序的編譯方式。makefile關係到整個工程的編譯規則。小項目無所謂,對於一個大的項目來說,其必不可少。
  • linux內核源碼編譯過程分析之Kconfig,Makefile
    在之前的課程裡,當我們在編譯linux內核源碼的時候,不知道大家會不會有一些疑問:1.linux內核源碼那麼多(大概800M),編譯的時候它(編譯系統)怎麼知道應該要編譯哪些文件呢?2.怎樣保證源碼的編譯順序?比如,先編譯A模塊,再編譯B模塊?3.怎麼樣把這些編譯出來的一個一個的目標文件,最終形成一個內核鏡像文件?
  • makefile的全自動化編譯和批量編譯
    對於大型項目來說,邊寫邊修改makefile中的.c文件是不效率的makefile實現自動添加.c文件(全自動化編譯)。$(wildcard 模式)在當前目錄下匹配所有的相應模式的文件。src = $(wildcard *.c) ,用於獲取所有.c文件。$(src :%.c=%.o), 把src的.c全部替換為.o (這裡的%是通配符)obj = $(src:%.c=%.o)這裡的 %.o:%.c 意思是所有的.o文件的生成,都依賴於.c文件。替代了下邊用#注釋的那幾句指令。
  • 程式設計師的術與道:術——makefile基本操作
    1.makefile是什麼如果你接觸過linux下的項目,或者接觸過C語言的項目,那麼你一定聽說過makefile。很多有名的開源項目都是用makefile管理的,比如linux、gcc等等(如果你沒有聽說過linux,那麼失禮了)。
  • 是不是覺得Makefile很繁瑣,一個cmake文件就可以解決
    linux編譯程序的時候,通常是使用Makefile文件來進行編譯,這個是能夠提高效率的,但是對於大中型的項目,每個文件夾下都需要創建Makefile,並且改變項目目錄結構都需要調整Makefile文件,如果是小型項目的話,那花費的時間還是能夠接受的,但是大中型項目要調整目錄結構,這個工作量還是不小的。所以,我們可以通過使用cmake來解決這樣的問題。
  • Linux下C編程基礎之:make工程管理器
    本文引用地址:http://www.eepw.com.cn/article/257149.htmlinux作業系統文章專題:linux作業系統詳解(linux不再難懂)到此為止,讀者已經了解了如何在Linux下使用編輯器編寫代碼,如何使用gcc把代碼編譯成可執行文件
  • Linux 系統下ARM Linux交叉編譯環境crosstool工具
    Linux系統下ARM Linux交叉編譯環境的建立目前流行的有三種途徑。我們常用的cross-cross-2.95.3,下載cross-2.95.3.tar.bz2解壓後放到/usr/local/arm目錄下設置下PATH即可使用,這是最方便快捷的方式,缺點是cross-2.95.3 GCC版本是2.95.3,版本較低,不能編譯2.6版本的Linux內核和版本較高的u-boot。
  • 盤點Linux作業系統下C語言編程注意事項
    linux作業系統文章專題:linux作業系統詳解(linux不再難懂)  2、學會makefile文件的編寫規則,並結合使用工具aclocal、autoconf和automake生成makefile文件。  3、掌握gcc和gdb的基本用法。
  • Linux Makefile生成 *d依賴文件以及gcc-M-MF-MP等相關選項說明
    不管是源文件還是頭文件有更新,目標文件都會重新編譯2.對於每個源文件,預處理器輸出 一個 make 規則,該規則的目標項 (target) 是源文件對應的目標文件名,依賴項 (dependency) 是源文件中 「39;換行符續成多行。規則顯示在標準輸出,不產生預處理過的 C 程序。
  • 如何在Linux系統中手動安裝arm-linux-gcc交叉編譯工具
    源文件需要經過編譯才能生成可執行文件。PC上的編譯工具鏈為gcc、ld、objcopy、objdump等。嵌入式開發少不了arm開發平臺。要編譯出能在arm平臺上運行的程序,必須使用交叉編譯工具arm-linux-gcc、arm-linux-ld、arm-linux-objcopy、arm-linux-objdump等。
  • 開源實時多線程IoT作業系統RIOT
    RIOT提供一致的API,並支持ANSI C和C ++應用程式編程,以及多線程,IPC,系統計時器,互斥體等。下圖為RIOT與其他實時系統的對比圖。要克隆RIOT存儲庫,需要Git版本控制系統並運行以下命令:git clone git://github.com/RIOT-OS/RIOT.git編譯RIOT代碼,根據要使用的硬體,需要首先安裝相應的工具鏈。RIOT使用make作為構建工具。
  • linux下定位多線程內存越界問題實踐總結
    整個定位過程遇到的問題和解決辦法對於多線程內存越界問題都很典型,簡單總結一下和大家分享。現象 core是在系統集成測試過程中發現的。伺服器程序MergeServer有一個50個工作線程組成的線程池,當使用8個線程的測試程序通過MergeServer讀取數據時,後者偶爾會core掉。用gdb查看core文件,發現core的原因是一個指針的地址非法,當進程訪問指針指向的地址時引起了段錯誤(segment fault)。見下圖。
  • 淺談linux下進程最大數、最大線程數、進程打開的文件數
    (Ubuntu-14.04-LTS-64bit)中linuxthreads 上最多可以創建 381 個線程,之後就會返回 EAGAINLINUX中單個進程理論上可以創建的最大線程數而32位系統中,可以穿件381個線程,這個值和理論完全相符,因為 32 位 linux 下的進程用戶空間是
  • Linux裡Makefile是什麼?如何工作的?
    makefile是用於自動編譯和連結的,一個工程有很多文件組成,每一個文件的改變都會導致工程的重新連結-----但是不是所有的文件都需要重新編譯,makefile能夠紀錄文件的信息,決定在連結的時候需要重新編譯哪些文件!當你需要在一些源文件改變後運行或更新一個任務時,通常會用到 make 工具。
  • linux程序編譯過程簡析
    環境下,平時進行應用程式的編譯操作時,一般都是直接使用gcc編譯生成可執行文件,很少關注gcc編譯的具體實現過程;雖然平時不需要關注編譯過程,但是在出現一些問題的時候,我們需要逐步去分析哪裡出現問題,學習編譯過程可以有助於問題的分析和解決;Linux應用程式的編譯過程,包含了四個過程:預處理(Prepressing)、編譯
  • 從0實現基於Linux socket聊天室-多線程伺服器模型-1
    前言Socket在實際系統程序開發張中,應用非常廣泛,也非常重要。線程標識線程有ID, 但不是系統唯一, 而是進程環境中唯一有效.線程的句柄是pthread_t類型, 該類型不能作為整數處理, 而是一個結構.下面介紹兩個函數:
  • 實時嵌入式系統的圖形界面支持系統
    為了說明MiniGUI的正確編譯和安裝過程,我們有必要首先了解Linux系統下用於軟體維護和建立的工具。 1.1make和makefile make是Linux下最常用的二進位程序、函數庫的建立生成工具。make運行時要根據當前目錄下的makefile文件(一般是Makefile),確定要生成什麼樣的二進位文件,以及對應的命令。
  • g++,CMake和Makefile了解一下
    <<endl; return 0; }測試代碼完成後,我們來進行下編譯,打開終端,在終端輸入g++ 文件名即可,在這個程序中就是下面命令:g++ test.cpp注意這裡的文件名是包括路徑的,要是不知道文件路徑的話可以在敲完g++和空格之後直接把文件拖進去,系統會自動添加文件路徑。
  • 交叉編譯程序:以 freetype 為例
    現在我們還是手工交叉編譯 freetype,這種方法在編譯、安裝一些小程序時很有用。1、程序運行的一些基礎知識1. 編譯程序時去哪找頭文件?系統目錄:就是交叉編譯工具鏈裡的某個 include 目錄;也可以自己指定:編譯時用 「 -I dir 」選項指定。2. 連結時去哪找庫文件?系統目錄:就是交叉編譯工具鏈裡的某個 lib 目錄;也可以自己指定:連結時用 「 -L dir 」選項指定。
  • Arm Linux Kernel 構建 情景分析
    簡單分析一下,大致做了這麼幾件事情:根據配置信息,生成了一些頭文件編譯了一些小工具根據配置信息,有選擇性地編譯一些源碼,將輸出的 obj 連結成對應的 built-in.o生成符號表文件將所有的 built-in.o 和符號表連結成內核 vmlinux使用 BOJCOPY 從 vmlinux 生成 Image生成壓縮過的內核