Câu hỏi vim nhị phân với tất cả các thư viện được liên kết tĩnh


Tôi muốn xây dựng vim với tất cả các thư viện, mà vim phụ thuộc vào, liên kết tĩnh. Phiên bản Vim là đủ để chạy YouCompleteMe. Tôi sử dụng các cờ sau đây với kịch bản cấu hình:

$./configure --with-features=huge \
             --enable-multibyte \
             --enable-rubyinterp \
             --enable-pythoninterp \
             --enable-perlinterp \
             --enable-luainterp \
             --enable-gui=gtk2 \
             --enable-cscope

Tôi đặt LDFLAGS thành '-static'

$export LDFLAGS='-static'

Tôi cũng cài đặt tất cả các phụ thuộc xây dựng vim:

$sudo apt-get build-dep vim

Nó chỉ ra rằng vẫn còn một cái gì đó mất tích vì tôi nhận được thông báo lỗi sau từ cấu hình kịch bản:

checking --with-tlib argument... empty: automatic terminal library selection
checking for tgetent in -ltinfo... no
checking for tgetent in -lncurses... no
checking for tgetent in -ltermlib... no
checking for tgetent in -ltermcap... no
checking for tgetent in -lcurses... no
no terminal library found
checking for tgetent()... configure: error: NOT FOUND!
      You need to install a terminal library; for example ncurses.
      Or specify the name of the library with --with-tlib.

Tôi đã kiểm tra nếu tôi có phiên bản tĩnh của thư viện ncurses - có, tôi có theo vị trí sau:

/usr/lib/i386-linux-gnu/libncurses.a

Nếu không có xây dựng LDFLAG vim tĩnh mà không có bất kỳ vấn đề gì.

Bạn có bất kỳ ý tưởng nào tại sao điều này xảy ra không?


2
2017-07-05 10:27


gốc


Bạn có thấy cái này không Stack Overflow câu trả lời (có thể liên quan): Không tìm thấy tgetent () trong khi biên dịch vim - steeldriver
@steeldriver có, tôi đã làm - Tôi theo tất cả các lời khuyên được đề cập ở đó và vẫn có lỗi trong cấu hình kịch bản. - user2551229
Hmm ... vì vậy đây không phải là vấn đề với tgetent cụ thể: nếu bạn nhìn vào src/auto/config.log bạn có thể sẽ thấy một mục như /usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/gcc...libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie. Có khả năng lỗi xuất hiện liên quan đến thư viện thiết bị đầu cuối vì đó là dịp đầu tiên ./configure cố gắng liên kết mọi thứ với LDFLAGS='-static' - steeldriver
... xung đột LDFLAGS dường như là kết quả của việc hỗ trợ dịch vụ thông dịch viên Ruby: xem liệu nó có hoạt động khi bạn thiết lập không --enable-rubyinterp=NO - nếu như vậy ít nhất sẽ cung cấp cho bạn một nơi nào đó để tập trung - steeldriver
@steeldriver nó giúp - cảm ơn! Nhưng tôi vẫn cần rubyinterp trong vim để kích hoạt YouCompleteMe - bạn có biết tại sao nó là vấn đề với libc.a không? - user2551229


Các câu trả lời:


Tôi đã có vấn đề tương tự khi thử một số thứ với pkgsrc trên cổng vim. Cố gắng mở config.log tập tin. Trong trường hợp của tôi, kịch bản cấu hình cho tôi biết điều này:

| int
| main ()
| {
| char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");
|   ;
|   return 0;
| }
configure:11408: error: NOT FOUND!
      You need to install a terminal library; for example ncurses.
      Or specify the name of the library with --with-tlib.

Vấn đề ở đây là termcap.h tiêu đề bị thiếu trên đoạn mã C. Vì vậy, tôi đã vá kịch bản cấu hình bằng cách thêm #include <termcap.h> và sau đó là ok.

Tôi không biết nếu nó cùng một vấn đề trên nền tảng của bạn nhưng bạn nên thử :)


1
2017-09-15 15:56