iOSコンパイル統合linuxオープンソースcライブラリのいくつかのレコード

2712 ワード

最近のiOSプロジェクトでは、Linuxの下にあるオープンソースcライブラリを使用する必要があります.Linuxとはプラットフォームをまたいでおり、さまざまなUnixシステムがサポートされています.理論的にiOSはMacOSから来ていますが、MacOSは互換性のあるUnixシステムなので、これらのライブラリもiOSで走ることができるはずです.もちろん、これらのライブラリには直接OSハードウェアはありません.
iOSでオープンソースcライブラリを使用する目的で、最初のステップはLinuxまたはMacでコンパイルできるようにしましょう.そのため、Linuxコンパイルインストールcライブラリのスキルポイントを少しずつ必要とします.基本的にはgccとmakeが使用されているが,実際にMakefileを直接提供するライブラリは少なく,プラットフォームにまたがるため,様々な依存環境の違いを処理するため,GUNのAutoToolsシリーズツールを用いてコンパイルされることが多いほか,CMakeなどのツールも用いられるが,今回の研究の範囲内ではない.Autotoolsについては、古いバージョンですが、見てみると、次のような例があります.https://www.lrde.epita.fr/~adl/autotools.html Autotoolsでコンパイルされたライブラリは、Linuxでは基本的に./Configure,make,make installの3ステップでインストールをコンパイルできます.また、Configureファイルを生成するスクリプトも必要です.これらのライブラリは、静的ライブラリでも動的ライブラリでもLinuxシステムの対応するディレクトリにインストールされます.たとえば、usr/local/libなどです.これらのライブラリを使用するアプリケーションは、リンクを指定できます.私も注文したばかりのスキルポイントなので、あまり言わないでください.要するにlinuxの下では基本的にスクリプトとツールチェーンに基づいてコンパイルされており、iOSがXCodeを使用してエンジニアリングを組織するのとは大きく異なります.もちろんiOSは実際にはツールチェーンでコンパイルすることもできますが、iOSの下でクロスコンパイルされたスクリプトを直接提供しているライブラリもあります.
Linuxの下のコンパイルができました.iOSを見てみましょう.いくつかのケースがある:1)cライブラリをMac上でiOSで使用する静的ライブラリをクロスコンパイルすることができる.aファイル、これ.aファイルはlipoツールによって合成された複数のcpuアーキテクチャを含む組合せバージョンである.例えばlibsodiumライブラリはiosを提供しています.shコンパイルスクリプトは、ヘッダファイルとをワンクリックで生成する.a、それから直接XCodeに入れて使うので、とても便利です.彼のこのiosを研究する.shスクリプトは、他のライブラリにも同様のクロスコンパイルを行うことができます.しかし、私がこの方法をインストールしてコンパイルしたmbedtlsライブラリはコンパイルに成功したが、XCodeに入れた後、接続の問題が発生し、記号が見つからないと言って、-all_を使用します.loadの後にmin targetが一致していないため、しかし変更した後にまたbitcodeがないと言って、私は工事のbitcodeも閉じた後に意外にも更に多くの記号が見つからないことが現れて、何時間も振り回して初心者として先に手を放すしかなくて、第2の方法で解決します.2)2つ目の方法は,ソースコードを直接コンパイルすることである.この方法は簡単で乱暴だが、問題もある.Autotoolsのツールを使うとconfigがあるからです.hファイル、このファイルはautoscanツールがコンパイルシステムを検索する環境で自動的に生成されます.つまり、Macシステムの下で生成されたconfig.hは実はMacシステムの環境に反応して、iOSシステムのconfigを得たいならば.h、やはりクロスコンパイルが必要です.もちろんコンパイルしなくてもいいです.コンフィギュアを実行すればいいだけです.もう一つの問題は、XCodeにこれらのライブラリがいくつか含まれている場合、configがあります.h,XCodeはどのライブラリでどのconfigを使うか見つからないかもしれない.h.一部の良心的なライブラリはマクロを提供して代替の名前を定義して、私たちはXCodeの中で設定する必要があります.この設定方法は私も何度も探してみましたが、other c flagsの中にDXXCONFIG_を追加しました.NAME=’\”xx_config.h”’注意使用”と”.cライブラリを使用して注意すべき問題:1)DEBUGマクロ定義の問題.一般的にiOS開発では、XCodeはdebugバージョンでDEBUG=1を定義します.しかし、cライブラリに参加すると憂鬱になります.cライブラリがあるからです.
#ifdef ENABLE_LOG
#define DEBUG(...) \
    do { \
        fprintf(stderr, __VA_ARGS__); \
        fprintf(stderr, "
"); \ } while (0) #else #define DEBUG(...) /* nothing */ #endif

見ましたか?ENABLEを定義するかどうかにかかわらずLOG、DEBUGマクロはすべて再定義されました.もしあなたのコードにこのようなDEBUGに基づく判断があれば、気をつけてください.
#if DEBUG
xxxx
#endif

DEBUGが再定義された後、xxxxxは永遠に実行されません.今、DEBUGはコードであるか、空であるかのどちらかです.あなたが#ifdef DEBUGに変更しても、DEBUGは永遠に定義されているので、xxxxはいつも実行されます.仕方なく自分でもう一つのXXXを定義するしかありません.DEBUGのマクロ使用.悪のCマクロ!2)しばらくは覚えていないので、後で補足します