私はzlibを使用するデモをコンパイルしようとしていますが、LD_LIBRARY_PATHに正しく設定したと思いますが、-lzフラグでは機能しません。 ?LD_LIBRARY_PATHが機能しません
[email protected]:kseq$ echo $LD_LIBRARY_PATH
/home/lisanhu/mine/repos/zlib/output/lib
[email protected]:kseq$ make
gcc -g -O2 kseq_test.c -o kseq_test -lz
/usr/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status
Makefile:3: recipe for target 'all' failed
make: *** [all] Error 1
[email protected]:kseq$ gcc -static -o kseq_test kseq_test.o -lz -L/home/lisanhu/mine/repos/zlib/output/lib
[email protected]:kseq$
問題は、私は、フォルダを検索強制的に-L
を使用する場合、それは私がLD_LIBRARY_PATHでそのフォルダを置けば、それは動作しない、動作することです。私はexport LD_LIBRARY_PATH
を使用したと確信していますが、それでも動作しません。
これは厄介です。なぜなら、必要とする他人のコードをコンパイルする必要がある場合、ライブラリを検索するための環境変数を設定する方が簡単です。私はこれを試してみましたが、それがスムーズに
[[email protected] tmp]$ export LD_LIBRARY_PATH=/home/1677/mine/repos/zlib/zlib-1.2.8
[[email protected] tmp]$ ls
gmon.out kseq.h kseq.tar kseq_test kseq_test.c Makefile
[[email protected] tmp]$ make
cc -g -O2 kseq_test.c -o kseq_test -lz
[[email protected] tmp]$ ldd kseq_test
linux-vdso.so.1 => (0x00007fffb01a6000)
libz.so.1 => /home/1677/mine/repos/zlib/zlib-1.2.8/libz.so.1 (0x00007f9556c83000)
libc.so.6 => /lib64/libc.so.6 (0x00000031fa400000)
/lib64/ld-linux-x86-64.so.2 (0x00000031fa000000)
[[email protected] tmp]$
を作品別のサーバーで
--------------更新------------
私の設定は正しいかもしれませんか?何か案は? 私はラップトップでUbuntu 16.04とFedora 25を試してみました.2017年2月16日に安定版に更新されました。私はそれが新しく更新されていないとしか伝えられないサーバーです。私は、最新のgccに問題があるかどうか疑問に思っていますか?
--------------更新------------
この問題の原因はわかっているかもしれません。エラーメッセージはcannot find -lz
です。 -lz
を1つのファイルとして扱っているようです。私はと-z
フラグが両方ともld
の使用にありますが、それは-lz
をそのようなものに変換して、両方のフラグのパラメータを持っていないことを発見してから、それらを単一のファイルパラメータとして一緒に組み合わせますか? 私の推論については完全にはわかりませんが、誰もこのケースをどのように処理するか考えていませんか?
--------------更新------------
全Makefileの
all:kseq.h kseq_test.c
$(CC) -g -O2 kseq_test.c -o kseq_test -lz
clean:
rm -f *.o
------ --------更新------------
第3セクションは、-vをccに追加した後、-lzが正常に実行されたため、有効な説明ではない可能性があります。リンカーに渡される
典型的なMakefileの関連部分をリンカを呼び出す行に示してください。 – alk