2016-10-03 4 views
0

나는 다음과 같은 주요 기능과 'NC'및 가져 오기 기능으로 'OC'를 가지고 : 다음 scons 'Program'명령에서 'LIBS'을 사용하면 정적 라이브러리를 찾지 못했습니다. 그 이유는 무엇입니까?

$ 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']를 지정하여 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으로 끝납니다.