我在編譯發現OMAPZoom.org在Android 2.6.35內核和我堅持我的想法是愚蠢的Makefile問題。Ç未定義的引用功能 - 編譯的Android/Linux內核
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
產生以下錯誤(加上更多的是相關的):
drivers/built-in.o: In function `dsscomp_createcomp':
drivers/video/omap2/dsscomp/device.c:175: undefined reference to `tiler_set_buf_state'
驅動程序/視頻/ OMAP2/dsscomp/device.c有以下#include指令:
#include <mach/tiler.h>
我相信引用包含原型以下文件:
arch/arm/mach-omap2/include/mach/tiler.h
反過來,在tiler_set_buf_state定義:
drivers/media/video/tiler/tiler.c
功能被正確使用的,報頭被包括在內。這導致我認爲定義沒有被編譯。該項目正在使用一個相當大的遞歸Makefile設置。
我真的不知道我還能放什麼東西在這裏,這將是有益的,但如果有東西,將是有用的問我。我希望有人能夠推動我朝着正確的方向前進。
.o文件中未定義的引用往往是由於缺少鏈接依賴項,而不是缺少的包含。 (雖然一個可能的例外是如果一個頭文件實際上應該提供實現代碼,而不是僅僅提供一個原型)你可以檢查源代碼中的特定行是否正在編譯,方法是在那裏放一個#error並驗證這個停止構建,但它正在編譯但未鏈接的可能性仍然存在 - 您可能需要查看爲該構建階段發佈的完整命令。您也可以在.o文件中查找標識符。 –
這是一個巧妙的訣竅,我將不得不把它留存以備將來使用。謝謝。 – CatShoes