2016-10-03 1 views
0

Я получил «н.д.» в качестве основной функции, а «ос» как функции импорта, как показано ниже:Использование команды «LIBS» в программе «scons» не удалось найти статическую библиотеку, почему?

$ cat n.c o.c 
int f(); 
int main(){ 
    f(); 
    return 0; 
} 
#include<stdio.h> 
int f(){ 
    printf("hello\n"); 
    return 2; 
} 

Затем SCons файл, как показано ниже:

Library('o.c') 
Program('n.c',LIBS=['o']) 

То, что я надеюсь, что здесь для компиляции oc и генерации libo.a (OK), а nc будет использовать этот «.a» для генерации окончательного исполняемого файла. Поэтому я указал LIBS = ['o'], в hoep, чтобы указать файл архива, чтобы найти библиотеку libo.a. Но:

$ scons -Q 
gcc -o n n.o -lo 
/usr/bin/ld: cannot find -lo 
collect2: error: ld returned 1 exit status 
scons: *** [n] Error 1 

На самом деле, SCons интерпретировать свою команду, чтобы быть «-lo», который должен найти динамическую общую библиотеку. Это не то, что я хотел, потому что во время связывания архив используется как объектные файлы. «-l» работает с архивными файлами и почему scons интерпретирует LIBS для использования разделяемых библиотек динамических ссылок?

Спасибо.

ответ

2

Кроме того, необходимо указать путь, по которому производится поиск библиотек, в данном случае:

Program('n.c',LIBS=['o'], LIBPATH=['.']) 

Пожалуйста, проверьте главу 4 «Строительство и Связь с библиотеками» нашего UserGuide, который не только объяснить, как для создания и работы с библиотеками, он также утверждает, что ваше требование сверху «SCons интерпретирует LIBS для использования динамических общих разделяемых библиотек». В противном случае объектные файлы будут заканчиваться на *.os ...

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