2016-04-02 13 views
0

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.

+0

'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

+0

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

+0

, 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

cevap

0

Bu kütüphanenin dosyalarını (ör. kstat.a veya kstat.so) ve üstbilgileri bulmanız gerekir. Daha sonra yollarını üstbilgilerle ve lib ile sırasıyla -I ve -L ile geçirin. Örneğin

: $CC -I /usr/include/kstat -L /usr/lib/kstat files -lkstat

+0

Bunu sunucudakilerin her ikisini de bulduktan sonra deneyeceğim. – Zooloo10