Merhaba, kstat kitaplığını bir proje için bir solaris sunucusuna bağlamaya çalışıyorum. i başlığının başında bu koyduk bunu yapmak için kullanacaktırkstat kitaplığı bağlantı hatası
CC=gcc
#CC=gcc -Wall
mysh: sh.o Funcs.o mp3.o get_path.o part3.o main.c
$(CC) -g -pthread -lkstat main.c sh.o Funcs.o mp3.o get_path.o part3.o -o mysh
Funcs.o: Funcs.h Funcs.c
$(CC) -g -c Funcs.c
mp3.o: mp3.h mp3.c
$(CC) -g -c mp3.c
sh.o: sh.c sh.h
$(CC) -g -c -pthread -DHAVE_KSTAT sh.c
get_path.o: get_path.c get_path.h
$(CC) -g -c get_path.c
clean:
rm -rf sh.o get_path.o mysh Funcs.o part3.o
sh.o part3.o içeren Üst dosya olmak gibi o
#ifdef HAVE_KSTAT
#include <kstat.h>
#endif
ve benim yapma dosyasıdır görünüyor ki kstat kullanan dosyadır. Ancak ben düzgün kstat kütüphane bağlarım nasıl hatayı
/usr/bin/ld: cannot find -lkstat
collect2: error: ld returned 1 exit status
ve ben yanlış yaptıklarını da
part3.h:8:19: fatal error: kstat.h: No such file or directory
#include <kstat.h>
^
compilation terminated.
make: *** [sh.o] Error 1
olsun. Make dosyasında yaratılması için part3.o kendi nesnesini oluşturmaya çalıştım ve kstat'ı buna bağladım ama eksik ayırıcıyı bana verdi.
'gcc' linker komut hattı üzerinde listelenen sırada emir hattı parametrelerini yönetir. bu yüzden kütüphane yolları 'kısa' kütüphane isimlerinden hemen önce olmalı ve her iki unsur da komut satırının sonunda olmalıdır. – user3629249
değişmeyen bir makroyu tanımlarken, '=' yerine ': =' kullanın, böylece makro yalnızca bir kez değerlendirilir. Aynı isimde bir dosya üretmeyen hedefler için (temiz: gibi) hedeften önce bir '.PHONY: clean' ifadesi olsun. – user3629249
, bir sistem yardımcı programını (gcc gibi) değiştirmek için bir makroyu kullanarak, doğru uygulamanın yürütülmesini sağlamak içindir. Bu nedenle, makronun yardımcı programın tam yoluna sahip olması gerekir. (gibi: CC: =/usr/lib/gcc). Not rm de bir sistem yardımcı programıdır, bu yüzden aynı tedaviyi almalıdır. – user3629249