在android上编译需要stl的库

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

现在,我得到的错误就像是错误:ctime:没有这样的文件或目录等等.我看到在std库的android ndk中有.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().现在,同一个环境中的所有构建器都将使用这些路径,在此示例中,Library()和Program()构建器将使用指定的路径.

此外,如果您要使用的路径位于项目目录内(在同一个目录或SConstruct的子目录中),那么您不需要使用完整的绝对路径,但可以添加“#”并指定相对于该路径的路径根级别SConstruct.

上一篇:c – Visual Studio命令编译器强制64位编译


下一篇:python – 无法运行scons获取导入错误