2014-10-27 63 views
2

Scons版本是2.3.3。以下是構建腳本的相關部分:如何解決CheckLib返回false?

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

CheckLib始終返回一個錯誤值。我該如何調試?我通過Scons源代碼跟蹤它,直到它試圖構建一個小測試程序,但之後我無法進一步追蹤它。

我嘗試了所有在section 27 of the Scons manual中建議的故障診斷標誌,但沒有一個產生任何額外的輸出。例如,

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 

我不知道-Q選項的用途是什麼。我試過省略它,它沒有區別;我沒有獲得有關stdout的額外信息。就在:

[...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. 
+0

你怎麼會有庫路徑集?應找到該庫,通過您通過LIBPATH構造變量提供的庫路徑進行搜索。 – Brady 2014-10-28 06:27:05

+0

構建腳本長達數千行。我相信LIBPATH設置正確,但我無法確定。如果我不得不猜測,我會猜測鏈接器實際上是在找到這個庫,但遇到鏈接錯誤(例如,將x86與x64連接)。我很想看看scons執行什麼命令,以及執行CheckLib時遇到的錯誤(可能是鏈接錯誤)。 – 2014-10-28 14:06:24

回答

3

的配置對象生成一個日誌文件,因爲它正在執行其行動,在默認情況下該文件是的config.log。根據scons手冊頁的Configure Contexts部分,通過傳遞log_file參數來初始化Configure對象時,可以自定義日誌文件。

使用一個簡單的SConstruct,我得到一個config.log文件,其構建失敗。

SConstruct:

env = Environment() 
conf = Configure(env)  
if not conf.CheckLib('foo'): 
    Exit('Can not find foo') 

的config.log:

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 

我猜這個日誌文件是足以讓你診斷問題。

BTW,利用Scons手冊介紹了-Q選項爲:關於閱讀SConscript文件,建設目標和進入目錄

平靜下來SCons的狀態信息。爲重建目標文件而執行的命令仍被打印。

+0

非常好! config.log坐在那裏,我只是沒有意識到它是一個scons文件。是的,它正是我所需要的。 – 2014-10-30 20:58:58

0

仰視--help後,我發現--debug選項有助於您的情況

scons --debug=findlibs blah blah 

的詳細信息將顯示在的config.log