libpng를 사용한 c++ 라이브러리를 iPhone 앱에 통합

3482 단어 C++SwiftObjective-C
C++로 작성된 static library를 swift로 작성된 ios 앱에 통합하는 방법은 많은 기사가 있으므로 그쪽을 참조해 주시기 위해 이번에는 libpng를 사용한 자작 C++ 라이브러리를 통합하는 방법을 설명합니다. .

Swift에서 C++ 라이브러리를 호출하는 방법
swift에서 c++ 자산을 사용합시다 htps : // m / m에 c / ms / 37 예 52 아 18dcb5c0b51

중요한 포인트



아는 사람은 알고 있는 이야기입니다만, Mac과 iPhone에서는 CPU의 아키텍쳐가 다르다. 아래의 구성이 대부분일까.
  • Mac: X86_64
  • iOS: arm64

  • 그 때문에, 자작 라이브러리나 자작 라이브러리로 사용하고 있는 외부 라이브러리는 arm64와 X86_64로 빌드하지 않으면 안된다. 이를 모르고 상당히 고생했다.

    자체 제작 라이브러리 빌드



    C++의 빌드는 cmake를 사용하고 있었기 때문에 상당히 간단하게 할 수 있다. 흐름은 cmake로 Xcode의 프로젝트를 작성해, archintecture의 설정을 해 빌드하고, 마지막은 lipo 커멘드로 각각의 Architecture용으로 빌드된 static 라이브러리를 병합한다.

  • cmake project의 루트로 다음을 실행. Xcode 프로젝트가 생성됩니다.
    cmake -G Xcode .
    
  • Xcode의 Build setting 메뉴에서 아키텍쳐의 설정을 한다 (단 이 설정을 아래만으로는 각 architecture용의 library는 작성되지 않는다.
  • 화면 왼쪽 상단의 출력 모드를 설정합니다. arm architecture용은 Generic iOS Device, x86_64용은 시뮬레이터(device는 무엇이든 좋다)를 선택한다.
  • 빌드를 실행하면 arm64가 ./Release-iphoneos에 X86_64는 ./Release-iphonesimulator에 static library [xxx.a]가 출력된다.

  • lipo 명령으로 각 라이브러리를 병합합니다. 예를 들어 xxx.a와 yyy.a를 병합하여 zzz.a를 ./Release 디렉토리에 저장하려면 다음과 같은 명령을 실행하십시오.
    lipo -output ./Release/zzz.a -create ./Release-iphoneos/xxx.a ./Release-iphonesimulator/yyy.a
    
  • 병합 된 정적 라이브러리를 iOS 앱 프로젝트의 라이브러리에 링크 된 부분에 복사합니다. 또한 objective-C에서 호출하는 함수의 헤더 정보가 기재된 헤더 파일도 마찬가지로 iOS 앱의 프로젝트 내의 헤더의 링크가 있는 디렉토리에 저장한다.

  • zlib arm64 및 x86_64 빌드



    내가 만든 C++ 라이브러리는 libpng를 사용하므로 libpng도 arm64를 지원해야합니다. 또한 libpng는 내부적으로 zlib를 사용하기 때문에 zlib도 arm64 대응해야합니다. xlib는 xcodebuid 명령으로 빌드하고 libpng는 ./configure에 인수를 지정하여 빌드했습니다.
  • zlib 소스 파일을 h tps : // → b. 네 t/에서 다운로드하여 확장합니다.

  • 확장된 디렉토리로 이동하여 다음을 실행하여 Xcode 프로젝트 파일 만들기
    cmake -G Xcode .
    
  • arm64, x86_64 각각에 대해 다음 명령을 실행하여 빌드합니다.

    arm64
    $ xcodebuild -project "zlib.xcodeproj" -sdk "iphoneos" IPHONEOS_DEPLOYMENT_TARGET="7.0" ARCHS="armv7 armv7s arm64"  ONLY_ACTIVE_ARCH=NO clean build TARGET_BUILD_DIR="./install_zlib_arm64" -scheme="ALL_BUILD"
    

    x86_64
    $ xcodebuild -project "zlib.xcodeproj" -sdk "iphonesimulator" IPHONEOS_DEPLOYMENT_TARGET="7.0" ARCHS="x86
    
  • 좋은 웹페이지 즐겨찾기