4

Android ndk を使用して、Android エミュレーターの x86 ディストリビューション用のライブラリを構築しようとしています。ライブラリはビルドに scons を使用し、多くの stl と boost の依存関係を持っています。これまでのところ、Android ツールチェーンに付属のコンパイラに --cxx と --cc を設定し、gcc の sysroot を ndk に付属のプラットフォーム固有のルートに設定しました。

現在、error: ctime: No such file or directory などのようなエラーが発生しています。stl ライブラリの android ndk に .a および .so ファイルがあることがわかりました。scons/コンパイラにリンクを依頼するにはどうすればよいですか?これらに対して?

4

1 に答える 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()代わりに使用してください。これで、同じ環境のすべてのビルダーがこれらのパスを使用します。この例では、Library()Program()ビルダーの両方が指定されたパスを使用します。

また、使用するパスがプロジェクト ディレクトリ内 (SConstruct の同じディレクトリまたはサブディレクトリ内) にある場合は、完全な絶対パスを使用する必要はありませんが、先頭に「#」を追加して、ルート レベルの SConstruct。

于 2012-06-12T09:39:25.497 に答える