Makefile編譯問題彙總

2021-07-25 16:52:20 字數 787 閱讀 2660

最近使用makefile編譯遇到了些問題,反覆地排查了4天多,才解決,要處理的問題很簡單,就是把一堆.c檔案編譯打包成.so,然後再把.so和demo.o打包成可執行檔案,遇到了下面 三個問題,總結一下:

(1)問題描述在這裡

原因:在生成可執行檔案的時候,加入了-shared引數,這時生成的並不是可執行檔案,而是動態庫,使用file命令檢視即可看到檔案的具體資訊

解決方案:cflags裡去掉-shared引數,改為在要生成庫的時候,手動新增-shared引數

(2)將之前的.so改為生成.a,然後打包生成可執行檔案,生成失敗,顯示demo呼叫的庫里定義的函式全部都找不到

解決方案:講makefile裡生成可執行檔案時的依賴項的順序調整一下,把庫寫在demo.o的後面,如下

pps_demo: $(demo_obj) lib_darknet.a

$(cc) $(cflags) -o $@ $^ $(ldflags)

另外,同事建議,打包時的輸入依賴項不要寫成
$^
而是手動輸入需要依賴哪些,這些會防止一些不必要的錯誤

(3)在生成庫的時候,出現了如下錯誤

undefined reference to symbol 'pow@@glibc_2.2.5'
原因:不明確

解決方案:在ldflags裡新增-lm

p.s.

makefile裡有時候定義的巨集失效,這個也是跟編譯引數的順序有關的,巨集定義在編譯目標檔案的時候要放在-c後邊,參考這篇部落格

makefile編譯問題

porting http 時遇到 makefile因為編譯時編碼的問題,導致無法編譯的問題。開始報錯是提示,api的倚賴項上,缺少分割符號,仔細檢查了下 和 都寫的很規矩啊。檢視另乙個可以編譯的資料夾的makefile,發現寫法完全相同,只是他對的很齊,心想難道這裡還有這種原因,抱著除錯時期懷疑一切...

編譯問題彙總

每次在編譯各類第三方庫的時候都會碰到很多問題,基本上都是通過google解決,其實簡單反思一下就會發現是對於系統了解的不夠,對於各類標準也是了解甚少。所以一而再再而三發生的問題其實是可以盡量去避免的。cmake也許是最常用的跨平台編譯組織工具了,像我在中也已經提到過的,首先得學會自己看以及這些檔案中...

erlang的makefile編譯問題

最近一直在看erlang程式設計,但是一直卡在第十五章的makefile那裡 make和gcc菜鳥一枚 弄了幾天終於把問題解決了。先感謝一下這篇部落格 對在erlang中的makefile一些解釋 下面是解釋及問題解決 由於作者在 erlang程式設計 書中提供的makefile是在mac os x...