2012-06-11 33 views
4

我正在嘗試使用android ndk爲android模擬器的x86發行版構建一個庫。該庫使用scons進行構建,並具有一堆stl和boost依賴項。到目前爲止,我已將--cxx和--cc設置爲android工具鏈附帶的編譯器,並將gcc的sysroot設置爲ndk附帶的特定於平臺的根。編譯需要STL的庫在android

現在,我得到錯誤,如錯誤:ctime:沒有這樣的文件或目錄等我看到有在Android ndk爲STL庫.a和.so文件,我怎麼問scons /編譯器鏈接這些?

+0

你看過docs/CPLUSPLUS-SUPPORT.html嗎?它談到了stl選項。 –

+1

我不知道scons是如何工作的,但你可以看看這個腳本,爲CMake定義工具鏈常量:http://code.google.com/p/android-cmake/ –

+0

如果可以的話,我們可以提供更多的幫助請參閱相關的SConstruct和SConscript文件以及編譯輸出。 – Brady

回答

1

您必須配置庫路徑,這是傳遞給編譯器的傳統「-L」標誌,在這種情況下是gcc。 (你應該使用g++而不是gcc?)

這是通過設置LIBPATH SCons構造變量來完成的,如here所述。請注意,SCons以便攜方式執行此操作,因此您不需要在路徑中指定-L。下面是我通常如何做到這一點的摘錄:

libPaths = [ 
    '/pathToNDK/build/cxx-stl/gnu-libstdc++/lib', 
    '/anotherLibPath', 
    '/and/yet/another' 
] 

includePaths = [ 
    '/pathToNDK/build/cxx-stl/gnu-libstdc++/include', 
    '/anotherIncludePath', 
    '/and/yet/another/include' 
] 

env.Append(LIBPATH = libPaths, CPPPATH = includePaths) 
env.Library(target='yourTarget', source = 'sourceFile.cc') 
env.Program(target='yourBinary', source = 'yourSource') 

通知我還包括如何指定包括路徑(也被傳遞到編譯器傳統的「-I」標誌)。這會將指定的包含和庫路徑附加到環境中。如果您不想追加,請改用env.Replace()。現在,同一個env上的所有構建器都將使用這些路徑,在此示例中,Library()Program()構建器都將使用指定的路徑。另外,如果你要使用的路徑在項目目錄內(在SConstruct的相同目錄或子目錄中),那麼你不需要使用完整的絕對路徑,但可以預先加上'#'並指定路徑相對於根級SConstruct。