Concepts of Makefile
這件事是這樣的:
我的 module 要在 Linux x86_64 上 complier ,且能夠在 OpenWrt arm64 上執行。
另一方面,我的 lib 會引用到其他的 lib。
所以我會遇到幾個問題:
Cross complier 是什麼?什麼時候需要它?如何設定?
如何引用別人的模組
在 C++ 程式呼叫 C 語言的函式
—————————————————–
為了解決這問題,我們要先知道幾件事:
認識編譯流程
認識編譯目標
如何寫 Makefile 並且 build 成 Library
Makefile 的參數,特別是 Link 相關 => 於下篇介紹
認識編譯流程
Step 1: 我們寫好的程式:*.c Step 2: 形成機器看的:*.o Step 3: 連結(Link) 成我們的目標
認識編譯目標
1. 執行檔:需在程式裡面有進入點 — main 2. 動態函式庫: *.so,這種函式庫的特徵在於:需要使用時才載入 這種函式庫的特徵在於:需要使用時才透過 dlopen 載入,之後使用 dlsym 取得函式 3. 靜態函式庫: *.a,這種函式庫的特徵在於:一開始就 build 成一包 lib 所以整個 lib 檔案會很大
如何寫 Makefile 並且 build 成 “執行檔”
build 成 Library 需要有其他參數,待下篇介紹參數如何寫。
來回答原本的問題:
Cross complier 是什麼?什麼時候需要它?如何設定?
=> 當你在編譯平台與執行平台不同時,就會需要它
e.g. Linux x86_64 上編譯 ,且要在 OpenWrt arm64 上執行
如何引用別人的模組
=> 1. 在你的程式裡面,加上要引用的 lib 對應到的 header
2. 在 makefile 的 Link 的地方,指向要引用的 lib (可以是 .a, .so 看你的需求)
在 C++ 程式呼叫 C 語言的函式
=> 這問題會跟 scope 有關,會跟 extern 一起介紹
ref. https://blog.gtwang.org/programming/howto-create-library-using-gcc/
Last updated