在安卓上编译需要STL的库

4
我正在尝试使用Android NDK为x86版本的Android模拟器构建库。该库使用scons进行构建,并具有大量的STL和Boost依赖项。目前,我已将--cxx和--cc设置为与Android工具链捆绑的编译器,并将gcc的sysroot设置为随NDK提供的特定于平台的根目录。
现在,我遇到了诸如“error: ctime: No such file or directory”等错误。我看到Android NDK中存在STL库的.a和.so文件,请问如何请求Scons /编译器链接这些文件呢?

你看过 docs/CPLUSPLUS-SUPPORT.html 吗?它讲解了 STL 选项。 - James Moore
1
我不知道scons是如何工作的,但你可以看一下这个脚本,它为CMake定义了工具链常量:http://code.google.com/p/android-cmake/ - Marc Plano-Lesay
如果我们能够查看相关的SConstruct和SConscript文件以及编译输出,我们就可以提供更多帮助。 - Brady
1个回答

1

您需要配置库路径,这些路径是传递给编译器(在本例中为gcc)的传统“-L”标志。 (如果您使用的是g++而不是gcc呢?)

通过设置LIBPATH SCons构建变量来完成此操作,如此处所述。请注意,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的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接