Điều này mất một lúc để làm đúng. Tôi gặp sự cố này khi biên dịch chéo trong Ubuntu cho mục tiêu ARM. Tôi đã giải quyết nó bằng:
PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --host=armv5tejl-unknown-linux-gnueabihf
Thông báo CFLAGS không được sử dụng với autogen.sh/configure, việc sử dụng nó đã cho tôi lỗi: "config: error: C compiler không thể tạo tệp thực thi". Trong môi trường xây dựng, tôi đang sử dụng tập lệnh autogen.sh đã được cung cấp, nếu bạn không có tập lệnh thay thế autogen.sh ./autogen.sh bằng ./configure trong lệnh trên. Tôi đã chạy config.guess trên hệ thống đích để lấy tham số --host.
Sau khi chạy autogen.sh/configure thành công, hãy biên dịch với:
PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make
CFLAGS tôi chọn sử dụng là: "-march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s". Sẽ mất một lúc để tất cả các thư mục include được thiết lập chính xác: bạn có thể muốn một số bao gồm trỏ đến trình biên dịch chéo của bạn và một số trỏ đến hệ thống tệp gốc của bạn bao gồm và có thể sẽ xảy ra một số xung đột.
Tôi chắc rằng đây không phải là câu trả lời hoàn hảo. Và tôi vẫn thấy một số bao gồm các thư mục trỏ đến / và không phải / ccrootfs trong Makefiles. Rất thích biết cách sửa lỗi này. Hy vọng điều này sẽ giúp ai đó.
export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH
, trình biên dịch của bạn sẽ tìm kiếm trước tiên trong~/local/include
và chỉ trong $ C_INCLUDE_PATH nếu nó không tìm thấy bao gồm trong thư mục đầu tiên.