簡體   English   中英

iphone缺少必需的架構i386

[英]iphone missing required architecture i386

我的一個項目使用靜態庫我收到此錯誤。 該項目在iOS設備中運行良好。 但不是在模擬器中。 靜態庫不是我的,所以我不能為i386重新編譯它。 但這是iPhone的硬件驅動程序。 因此,當在Simulator中運行時,我真的不需要這個庫。 如果配件與設備一起存在,那么應用程序將具有不同的流程。

所以我必須保留對此文件的引用。 但只需要iOS設備。 在模擬器中運行以運行應用程序以進行UI和其他測試時不需要。

我怎樣才能避免這個錯誤? 無論如何配置目標或方案以避免在模擬器中運行時的目標文件/ lib?

ld: warning: ignoring file 
/Framework/iSmartSDK/libiSmartSDK_Lib.a, missing required architecture i386 in file  
/Framework/iSmartSDK/libiSmartSDK_Lib.a (2 slices)
Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_iSmart", referenced from:
      objc-class-ref in SmartCardReaderVC.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

當你使用它時,引用符號IS並且需要lib。 如果你真的不需要這個功能,請將它的用法包裝在一個define中。 '定義':

#if TARGET_OS_IPHONE
   iSmart *smart = ....
#else
   NSLog(@"no ismart on mac");
#endif

注意:僅指定/調用符號是不夠的。 甚至不使用符號來聲明變量**


它可能只在1文件AFAICS .. #ifdef整個文件,也許創建一個SmartReaderVC存根

即使您說您在模擬器中不需要庫,鏈接器也會說其他內容。 它正在尋找iSmart類。

最好的方法可能是為iSmart類寫一個存根:

  • 創建一個靜態庫項目。

  • 添加一個非常非常小的iSmart類,例如類和兩種方法。 每個方法都不執行任何操作或返回0。

  • 為模擬器(i386)構建庫。

  • 使用lipo工具將來自第三方的庫和存根庫的i386部分合並到一個庫中(導致設備的很大一部分和模擬器的非常小的部分)。

  • 將您的應用與自定義構建的庫而不是原始庫鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM