Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android上编译需要stl的库_Android_C++_Android Ndk_Scons - Fatal编程技术网

在android上编译需要stl的库

在android上编译需要stl的库,android,c++,android-ndk,scons,Android,C++,Android Ndk,Scons,我正在尝试使用android ndk为android emulator的x86发行版构建一个库。该库使用SCON进行构建,并具有一系列stl和boost依赖项。到目前为止,我已经将--cxx和--cc设置为android工具链附带的编译器,并将gcc的sysroot设置为ndk附带的特定于平台的根 现在,我遇到了错误,比如错误:ctime:没有这样的文件或目录等。我看到android ndk中有.a和.so文件用于stl库,我如何要求SCON/编译器链接这些文件?您必须配置库路径,这是传递给编译

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


现在,我遇到了错误,比如错误:ctime:没有这样的文件或目录等。我看到android ndk中有.a和.so文件用于stl库,我如何要求SCON/编译器链接这些文件?

您必须配置库路径,这是传递给编译器的传统“-L”标志,在本例中为gcc。(您是否应该使用
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')
注意,我还包括了如何指定include路径(传递给编译器的传统“-I”标志)。这是将指定的include和library路径附加到环境中。如果不想追加,请改用
env.Replace()
。现在,同一环境中的所有构建器都将使用这些路径,在本例中,
Library()
Program()
构建器都将使用指定的路径


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

是否查看了docs/CPLUSPLUS-SUPPORT.html?它讨论了stl选项。我不知道scons是如何工作的,但是你可以看看这个脚本,为CMake定义工具链常量:如果我们能看到相关的SConstruct和SConscript文件以及编译输出,我们可以提供更多帮助。