Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios iPhone静态库Clang/LLVM错误:非惰性符号指针_Ios_Xcode_Air_Static Libraries_Clang - Fatal编程技术网

Ios iPhone静态库Clang/LLVM错误:非惰性符号指针

Ios iPhone静态库Clang/LLVM错误:非惰性符号指针,ios,xcode,air,static-libraries,clang,Ios,Xcode,Air,Static Libraries,Clang,经过几个小时的实验,我成功地将问题简化为以下示例(C++): extern“C”void foo(); 结构测试 { ~test(){} }; void doTest() { 测试t;//1 foo();//2 } 这是使用提供的Clang编译器(Apple LLVM编译器3.0)和iOS 5.0 SDK为XCode 4.2中的iOS设备编译的。该项目配置为Cocoa Touch静态库,“启用与共享库的链接”设置为否,因为我正在构建一个AIR本机扩展。函数foo在另一个外部库中定义。(在我的实

经过几个小时的实验,我成功地将问题简化为以下示例(C++):

extern“C”void foo();
结构测试
{
~test(){}
};
void doTest()
{
测试t;//1
foo();//2
}
这是使用提供的Clang编译器(Apple LLVM编译器3.0)和iOS 5.0 SDK为XCode 4.2中的iOS设备编译的。该项目配置为Cocoa Touch静态库,“启用与共享库的链接”设置为否,因为我正在构建一个AIR本机扩展。函数
foo
在另一个外部库中定义。(在我的实际项目中,这将是Adobe定义的用于AIR本机扩展的任何C API函数。)

尝试编译此代码时,我返回错误:

FATAL:incompatible feature used: section type non_lazy_symbol_pointers (must specify "-dynamic" to be used)
clang: error: assembler command failed with exit code 1 (use -v to see invocation)
如果我注释掉上面标记为
1
2
的任何一行,或者如果我将生成设置“启用与共享库的链接”更改为“是”,错误就会消失。(但是,如果更改生成设置,则会收到多个
ld警告:将库链接到最终项目时出现意外的srelocation type 9
警告,并且应用程序在设备上运行时崩溃。)如果从
测试中删除析构函数,生成错误也会消失


那么:这是叮当作响的虫子吗?我是否缺少一些非常重要且未记录的构建设置?至少可以说,外部提供的函数和带有析构函数的结构之间的交互非常奇特。

经过多次搜索,我终于找到了Richard Lord的。事实证明,有效的开发需要使用Adobe尚未费心记录的几个标志(除非您将开发人员的博客文章计算为文档——我不这么认为)

长话短说:

  • 将“启用与共享库的链接”设置为“是”。将此设置为No是关于开发AIR原生扩展的最普遍的错误建议
  • 使用ADT的
    -platformsdk
    选项指向苹果提供的iOS SDK(例如:
    -platformsdk/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.SDK
    )。这将减轻
    意外的重新定位类型9
    警告。Adobe的文档表明,platformsdk只适用于Android,但这是一个谎言
  • 打包扩展时(即,在构建ANE文件时),使用未记录的
    -platformoptions
    选项指定包含其他链接器参数的xml文件。此XML文件的格式也未记录,但可以在AIR SDK目录下的
    templates/extensions/ios/platform descriptor template.XML
    下找到模板。在同一位置还有一个xsd模式。此文件允许您指定扩展使用的任何其他框架,因此您将不受AIR SDK支持的默认框架的限制
  • 希望看到新的链接器警告:
    ld:warning:ARM函数没有4字节对齐
    。这显然可以安全地忽略。据报道,Adobe已意识到这一问题。我想您可以通过将
    -w
    传递到platformoptions文件中的链接器来关闭此警告,但请注意
    -w
    会关闭所有警告,而不仅仅是该警告
Adobe工程师之一Rajorshi Ghosh在以下两篇博文中提供了更多信息:


这仍然不能解释“启用与共享库的链接”、外部定义的函数和析构函数之间的奇怪交互,但现在这已沦为一个好奇的问题,而不是阻塞问题。

经过大量搜索,我终于找到了Richard Lord的。事实证明,有效的开发需要使用Adobe尚未费心记录的几个标志(除非您将开发人员的博客文章计算为文档——我不这么认为)

长话短说:

  • 将“启用与共享库的链接”设置为“是”。将此设置为No是关于开发AIR原生扩展的最普遍的错误建议
  • 使用ADT的
    -platformsdk
    选项指向苹果提供的iOS SDK(例如:
    -platformsdk/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.SDK
    )。这将减轻
    意外的重新定位类型9
    警告。Adobe的文档表明,platformsdk只适用于Android,但这是一个谎言
  • 打包扩展时(即,在构建ANE文件时),使用未记录的
    -platformoptions
    选项指定包含其他链接器参数的xml文件。此XML文件的格式也未记录,但可以在AIR SDK目录下的
    templates/extensions/ios/platform descriptor template.XML
    下找到模板。在同一位置还有一个xsd模式。此文件允许您指定扩展使用的任何其他框架,因此您将不受AIR SDK支持的默认框架的限制
  • 希望看到新的链接器警告:
    ld:warning:ARM函数没有4字节对齐
    。这显然可以安全地忽略。据报道,Adobe已意识到这一问题。我想您可以通过将
    -w
    传递到platformoptions文件中的链接器来关闭此警告,但请注意
    -w
    会关闭所有警告,而不仅仅是该警告
Adobe工程师之一Rajorshi Ghosh在以下两篇博文中提供了更多信息:


这仍然不能解释“启用与共享库的链接”、外部定义的函数和析构函数之间奇怪的交互,但现在这已经变成了一个好奇的问题,而不是阻塞问题。

我在非空气箱中遇到了同样的问题。主要问题是你的第一个b