2016-04-02 7 views
0

Привет, поэтому я пытался связать библиотеку kstat на сервере solaris для проекта для класса. чтобы сделать это я поставил это в начале заголовка, который будет использовать егоСсылка на библиотечную ошибку kstat

#ifdef HAVE_KSTAT 
#include <kstat.h> 
#endif 

и мой файл делает выглядят

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, который это файл с использованием kstat. Однако я получаю ошибку

/usr/bin/ld: cannot find -lkstat 
collect2: error: ld returned 1 exit status 

, а также

part3.h:8:19: fatal error: kstat.h: No such file or directory 

#include <kstat.h> 
       ^
compilation terminated. 
make: *** [sh.o] Error 1 

, что я сделал не так, как я правильно связать kstat библиотеку. Я пробовал сделать part3.o свой собственный объект для создания внутри файла make и связать kstat в этом, но он дал мне ошибку, отсутствующую в разделителе.

+0

Параметр 'gcc' компоновщик обрабатывает параметры командной строки в указанном порядке в командной строке. поэтому пути библиотеки должны быть непосредственно перед «короткими» именами библиотек, и оба этих элемента должны быть в конце командной строки. – user3629249

+0

при определении неизменяемого макроса используйте ': =', а не '=', поэтому макрос оценивается только один раз. Для целей (например: clean), которые не создают файл с тем же именем, перед мишенью имеют инструкцию '.PHONY: clean'. – user3629249

+0

, используя макрос для замены системной утилиты (например, gcc), предназначен для обеспечения правильной работы утилиты. Следовательно, макрос должен иметь полный путь к утилите. (например: CC: =/usr/lib/gcc). Примечание 'rm' также является системной утилитой, поэтому следует получить такое же лечение. – user3629249

ответ

0

Вы должны найти файлы этой библиотеки (например, kstat.a или kstat.so) и ее заголовки. Затем передайте пути в заголовки и библиотеки с -I и -L соответственно.

Например: $CC -I /usr/include/kstat -L /usr/lib/kstat files -lkstat

+0

Я попробую это, как только я найду путь к обоим из них на сервере. – Zooloo10

 Смежные вопросы

  • Нет связанных вопросов^_^