iphone - “.../libtool:无法找到文件:-lxml2”
我的 xcode 工作区中有 2 个项目。一种是静态库,另一种是使用静态库。
在静态库中,我添加了 GDataXMLNode.h 和 GDataXMLNode.m 文件,我在主项目中使用它们。 GDataXMLNode.h 是一个公共文件,因此它在主项目中可见。我还将这两个项目的目标与 libxml2.dylib 链接起来。我还在标头搜索路径和用户标头搜索路径中包含位置 /usr/include/libxml2。
尽管有这些,我还是收到 Apple Mach-O Librarian 错误:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: can't locate file for: -lxml2
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: -lxml2 is not an object file (not allowed in a library)
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/libxml2.dylib is a dynamic library, not added to the static library
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/libxml2.dylib is a dynamic library, not added to the static library
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/libz.dylib is a dynamic library, not added to the static library
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/libz.dylib is a dynamic library, not added to the static library
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool failed with exit code 1
你知道我该如何解决这个问题吗?
I have a 2 projects in an xcode workspace. One is a static library and the other one use the static library.
In the static library I added the GDataXMLNode.h and GDataXMLNode.m files, which I use in the main project. The GDataXMLNode.h is a public file so it's visible in the main project. I also linked the target of both projects with libxml2.dylib. And I also include in the Header Search Paths and User Header Search Paths the location /usr/include/libxml2.
Although these, I get an Apple Mach-O Librarian Error:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: can't locate file for: -lxml2
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: -lxml2 is not an object file (not allowed in a library)
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/libxml2.dylib is a dynamic library, not added to the static library
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/libxml2.dylib is a dynamic library, not added to the static library
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/libz.dylib is a dynamic library, not added to the static library
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/libz.dylib is a dynamic library, not added to the static library
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool failed with exit code 1
Do you know how can I fix this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我最近遇到了完全相同的错误。正如您所发现的,从“构建设置”中的“其他链接器标志”中删除“-lxml2”有助于解决错误。当您构建静态库时确实如此。您将需要在实际包含静态库的任何目标中包含该链接器标志(“-lxml2”)。例如,如果您像我一样为静态库创建了单元测试(即 MyStaticLibraryProjectTests),那么您需要确保将链接器标志添加到 MyStaticLibraryProjectTests 目标,而不是实际的 MyStaticLibraryProject 目标。当我查看“构建设置”选项卡时,我通常会忘记选择特定目标。我通常假设,如果单击蓝色大项目图标,则构建设置仅适用于整个项目,但在修改这些设置时选择正确的目标非常重要。
早期,大多数项目通常只有一个目标,但随着您的进步,每个项目可能有多个目标。希望有帮助。
I had the exact same error recently. As you found, removing "-lxml2" from the "Other Linker Flags" in Build Settings helped resolve the errors. This is true when you are building a static library. You will need to include that linker flag ("-lxml2") in any target that actually includes your static library. For example, if you created unit tests for your static library as I did (i.e. MyStaticLibraryProjectTests) then you would need to make sure to add the linker flags to the MyStaticLibraryProjectTests target but not to the actual MyStaticLibraryProject target. More often than not I generally forget to select a specific target when I go to look at my Build Settings tab. I usually assume that if I click on the big blue project icon that the build settings are just for the entire project but it is very important to select the correct target when modifying those settings.
Early on most projects generally do only have a single target but as you get more advanced it is possible to have multiple targets for each project. Hope that helps.