在 scons 'Program' 命令中使用 'LIBS' 找不到静态库,为什么?

Using 'LIBS' in scons 'Program' command failed to find static library, why?

我有一个 'n.c' 作为主函数,'o.c' 作为导入函数,如下所示:

$ 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'])

这里希望编译o.c生成libo.a(OK),n.c会用这个'.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',即查找动态共享库。 这不是我想要的,因为在 linking 期间,存档像目标文件一样使用。 “-l”是否适用于存档文件,为什么 scons 将 LIBS 解释为使用动态 link 共享库?

谢谢。

您还需要指定搜索库的路径,在本例中:

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

另请查看我们 UserGuide 的第 4 章 "Building and Linking with Libraries",它不仅解释了如何创建和使用库,还进一步说明了您在上面 "SCons interprets LIBS to use dynamic link shared libraries" 的声明是完全错了。否则目标文件将以 *.os 结尾...