すべての依存関係とライブラリをLLVMIR形式で表現しています。 Linux(Ubuntuなど)からiOS、Android、Windows、Macプラットフォーム用の共有オブジェクトにライブラリをクロスコンパイルするにはどうすればよいですか?
4つのプラットフォームすべて(OpenCVやZeroMQ 4+など)で選択した別のライブラリに少なくとも1つの依存関係があるサンプルライブラリをコンパイルする単一のサンプルスクリプトを提供してください。
LLVM静的コンパイラ (llc)を使用すると、LLVM IRを特定のターゲットトリプルのオブジェクトファイルにコンパイルできます。ターゲットトリプルは十分に文書化されていませんが、LLVMインフラストラクチャはすべてオープンソースであるため、ソースコードをすばやく検索すると ここ になります。
残念ながら、使用できるターゲットトリプルの個別のリストに関するドキュメントはありません。ただし、ターゲットにしているシステムが正確にわかっている場合は、トリプルの作成はかなり簡単です。 ターゲットトリプルドキュメント から取得すると、次のことがわかります。
トリプルの一般的な形式は
<Arch><sub>-<vendor>-<sys>-<abi>
です。ここで、
Arch
=x86_64
、i386
、arm
、thumb
、mips
など。sub
=例ARMの場合:v5
、v6m
、v7a
、v7m
など。vendor
=pc
、Apple
、nvidia
、ibm
など。sys
=none
、linux
、win32
、darwin
、cuda
など。abi
=eabi
、gnu
、Android
、macho
、elf
など。
使用しているターゲットトリプルがわかったら、-mtriple
フラグを使用して文字列として指定します。ここではいくつかの例を示します。
-mtriple=i686-pc-win32-gnu
-mtriple=i686-pc-linux-gnu
-mtriple=armv7-Apple-ios
-mtriple=arm-linux-androideabi
次に、filetypeフラグを使用してオブジェクトファイルをコンパイルすることを指定する必要があります。
-filetype=obj
私があなたの質問を正しく理解していれば、これで十分でしょう。
すべてのプラットフォームとオペレーティングシステムで単一のファイルを使用することを期待している場合、これは可能ですが、多くの作業が必要になります。ここstackoverflowでそれに関する答えを期待しないでください。