我正在嘗試使用android ndk爲android模擬器的x86發行版構建一個庫。該庫使用scons進行構建,並具有一堆stl和boost依賴項。到目前爲止,我已將--cxx和--cc設置爲android工具鏈附帶的編譯器,並將gcc的sysroot設置爲ndk附帶的特定於平臺的根。編譯需要STL的庫在android
現在,我得到錯誤,如錯誤:ctime:沒有這樣的文件或目錄等我看到有在Android ndk爲STL庫.a和.so文件,我怎麼問scons /編譯器鏈接這些?
我正在嘗試使用android ndk爲android模擬器的x86發行版構建一個庫。該庫使用scons進行構建,並具有一堆stl和boost依賴項。到目前爲止,我已將--cxx和--cc設置爲android工具鏈附帶的編譯器,並將gcc的sysroot設置爲ndk附帶的特定於平臺的根。編譯需要STL的庫在android
現在,我得到錯誤,如錯誤:ctime:沒有這樣的文件或目錄等我看到有在Android ndk爲STL庫.a和.so文件,我怎麼問scons /編譯器鏈接這些?
您必須配置庫路徑,這是傳遞給編譯器的傳統「-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。
你看過docs/CPLUSPLUS-SUPPORT.html嗎?它談到了stl選項。 –
我不知道scons是如何工作的,但你可以看看這個腳本,爲CMake定義工具鏈常量:http://code.google.com/p/android-cmake/ –
如果可以的話,我們可以提供更多的幫助請參閱相關的SConstruct和SConscript文件以及編譯輸出。 – Brady