4

我正在尝试使用 android ndk 为 android 模拟器的 x86 发行版构建一个库。该库使用 scons 进行构建,并具有一堆 stl 和 boost 依赖项。到目前为止,我已将 --cxx 和 --cc 设置为 android 工具链附带的编译器,并将 gcc 的 sysroot 设置为 ndk 附带的平台特定根目录。

现在,我收到诸如错误之类的错误:ctime:没有这样的文件或目录等。我看到 stl 库的 android ndk 中有 .a 和 .so 文件,我如何要求 scons/编译器链接反对这些?

4

1 回答 1

1

您必须配置库路径,这是传递给编译器的传统“-L”标志,在本例中为 gcc。(你应该使用g++而不是gcc?)

这是通过设置LIBPATHSCons 构造变量来完成的,如此所述。请注意,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()改用。现在,同一环境中的所有构建器都将使用这些路径,在此示例中,theLibrary()Program()构建器都将使用指定的路径。

此外,如果您要使用的路径位于项目目录内(在 SConstruct 的同一目录或子目录中),那么您不需要使用完整的绝对路径,但可以在前面加上 '#' 并指定相对于根级 SConstruct。

于 2012-06-12T09:39:25.497 回答