如何解决 CheckLib 返回 false 的问题?

def*_*mer 5 scons

Scons版本是2.3.3。这是构建脚本的相关部分:

if not conf.CheckLib('portaudio'):
    raise Exception(
        'Did not find libportaudio.a, portaudio.lib, or the PortAudio-v19 development header files.')
Run Code Online (Sandbox Code Playgroud)

CheckLib 始终返回错误值。我该如何调试这个?我跟踪了 Scons 源代码,直到它尝试构建一个小型测试程序,但随后我无法进一步跟踪它。

我尝试了Scons 手册第 27 节中建议的所有故障排除标志,但没有一个产生任何额外的输出。例如,

C:\code\github\mixxx2>scons -Q --debug=findlibs winlib=%WINLIB_PATH% qtdir=%WINL
IB_PATH%\build\qt-everywhere-opensource-src-4.8.6 hss1394=1 mediafoundation=1 op
us=0 build=%BUILD_TYPE% machine=%TARGET_MACHINE% toolchain=msvs virtualize=0 tes
t=1 sqlitedll=0 mssdk_dir=%MSSDK_DIR% force32=1
Run Code Online (Sandbox Code Playgroud)

我不知道这个-Q选项有什么用。我尝试过省略它,但没有什么区别;我没有得到有关标准输出的更多信息。只是这个:

[...truncated...]
Checking for C library portaudio... no
ERROR:root:Unmet dependency: Did not find libportaudio.a, portaudio.lib, or the
PortAudio-v19 development header files.
Run Code Online (Sandbox Code Playgroud)

Dav*_*her 4

配置对象在执行操作时会生成一个日志文件,默认情况下该文件是config.log。根据scons 手册页的配置上下文Configure部分,可以在通过传递参数初始化对象时自定义日志文件log_file

通过一个简单的 SConstruct,我得到了一个包含构建失败的 config.log 文件。

S构造:

env = Environment()
conf = Configure(env)    
if not conf.CheckLib('foo'):
    Exit('Can not find foo')
Run Code Online (Sandbox Code Playgroud)

配置日志:

file /home/dbacher/Code/scons-test/SConstruct,line 2:
        Configure(confdir = .sconf_temp)
scons: Configure: Checking for C library foo... 
.sconf_temp/conftest_0.c <-
  |
  |
  |
  |int
  |main() {
  |  
  |return 0;
  |}
  |
gcc -o .sconf_temp/conftest_0.o -c .sconf_temp/conftest_0.c
gcc -o .sconf_temp/conftest_0 .sconf_temp/conftest_0.o -lfoo
/usr/bin/ld: cannot find -lfoo
collect2: ld returned 1 exit status
scons: Configure: no
Run Code Online (Sandbox Code Playgroud)

我猜这个日志文件足以让您诊断问题。

顺便说一句,scons 手册将该-Q选项描述为:

静默有关读取 SConscript 文件、构建目标和输入目录的 SCons 状态消息。执行重建目标文件的命令仍会打印。