Làm cách nào để thêm đường dẫn bao gồm và lib để cấu hình / tạo chu trình?


81

Tôi cần một nơi để cài đặt thư viện trong hộp linux mà tôi không có quyền truy cập. Tôi đang sử dụng ~ / local [/ bin, / lib, / include], nhưng tôi không biết làm cách nào để biết ./configure để tìm kiếm các thư viện ở đó (đặc biệt, tôi đang cố gắng biên dịch emacs, cần libgif , không có trong bản phân phối của tôi).

Tôi đã thử thêm

export PATH=$PATH:~/local/bin
export LD_LIBRARY_PATH=~/local/lib
export C_INCLUDE_PATH=~/local/include
export CPLUS_INCLUDE_PATH=~/local/include

sang .bashrc nhưng nó dường như không hoạt động.


4
Lưu ý rằng ngoại trừ PATH, bạn sẽ ghi đè lên những cái mặc định của hệ thống. Nếu bạn thực hiện một cái gì đó giống như vậy 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/includevà chỉ trong $ C_INCLUDE_PATH nếu nó không tìm thấy bao gồm trong thư mục đầu tiên.
Marc Plano-Lesay

Câu trả lời:


98

Bạn muốn một tệp config.site. Thử:

$ mkdir -p ~ / local / share
$ cat << EOF> ~ / local / share / config.site
CPPFLAGS = -Tôi $ HOME / địa phương / bao gồm
LDFLAGS = -L $ HOME / local / lib
...
EOF

Bất cứ khi nào bạn gọi một tập lệnh cấu hình được tạo autoconf với --prefix = $ HOME / local, config.site sẽ được đọc và tất cả các nhiệm vụ sẽ được thực hiện cho bạn. CPPFLAGS và LDFLAGS phải là tất cả những gì bạn cần, nhưng bạn cũng có thể thực hiện bất kỳ nhiệm vụ mong muốn nào khác (do đó, ... trong ví dụ trên). Lưu ý rằng cờ -I thuộc CPPFLAGS chứ không phải trong CFLAGS, vì -I dành cho bộ xử lý trước chứ không phải trình biên dịch.


William; Cảm ơn, đó là lời khuyên về CPPFLAGS để xây dựng trên một máy chủ được chia sẻ. Đã lưu nhiều sự cố với các lần chạy ./configure không thành công hôm nay, vì ghi chú của bạn.
Brian Tiffin

29

Đặt LDFLAGS và CFLAGS khi bạn chạy thực hiện:

$ LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make

Nếu bạn không muốn làm điều đó hàng triệu lần, hãy xuất chúng trong .bashrc (hoặc trình bao tương đương của bạn). Đồng thời đặt LD_LIBRARY_PATH để bao gồm / home / me / local / lib:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib

khi tôi thêm LDFLAGS và CFLAGS để .bashrc ./configure không thành công với một cấu hình: lỗi: C trình biên dịch không thể tạo file thực thi ...
Lacrymology

Họ có thể đang ghi đè các tham số trình biên dịch mã kiểm tra cấu hình. Chỉ cần sử dụng tìm nạp trước make env. Ngoài ra, hãy thử và xem liệu cấu hình chưa có tùy chọn ghi đè libgif. Nếu các tập lệnh autotools được tạo đúng cách, nó sẽ cho bạn biết một đường dẫn nơi libgif được cài đặt (ví dụ: ghi đè vị trí thư viện mặc định). Đó sẽ là giải pháp sạch hơn.
long404

cùng sự khác biệt .. tneme @ ws16lab07: ~ / Descargas / emacs-23.3 $ LDFLAGS = "- L / home / tneme / local / lib" CFLAGS = "- l / home / tneme / local / include" ./configure --prefix = "/ home / tneme / local" kiểm tra loại hệ thống xây dựng ... i686-pc-linux-gnu kiểm tra loại hệ thống máy chủ ... i686-pc-linux-gnu kiểm tra gcc ... gcc kiểm tra xem trình biên dịch C có hoạt động không ... không có cấu hình: lỗi: trong /home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See config.log' để biết thêm chi tiết t
Lacrymology

chúng nên được xác định khi bạn "tạo", không phải khi bạn "cấu hình".
long404,

vừa thử định cấu hình emacs 23 với những thứ này và tôi không gặp sự cố đó: LDFLAGS = "- L / home / me / local / lib" CFLAGS = "- I / home / me / local / include" ./configure kiểm tra hệ thống xây dựng gõ ... x86_64-chưa biết-linux-gnu kiểm tra loại hệ thống máy chủ lưu trữ ... x86_64-chưa biết-linux-gnu kiểm tra gcc ... gcc kiểm tra tên tệp đầu ra mặc định của trình biên dịch C ... a.out kiểm tra xem C trình biên dịch hoạt động ... có kiểm tra xem chúng ta có đang biên dịch chéo hay không ... không kiểm tra hậu tố của tệp thực thi ... kiểm tra hậu tố của tệp đối tượng ... o kiểm tra xem chúng tôi có đang sử dụng trình biên dịch GNU C hay không ... vâng
long404

8

Đ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 đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.