- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的设置:
Mac OS X 10.7.4
Xcode 4.3.2
我有一个 Mac OS X 应用程序,它加载嵌入式 Cocoa 可加载 bundle 以用作插件。这些插件包含在 Mac 应用程序的 .app
中捆绑在标准位置( MyApp.app/Contents/PlugIns
)并通过标准 Cocoa NSBundle
加载API。在标准“复制文件”构建阶段,插件将被复制到最终的 Mac 应用程序包中,目标设置为 PlugIns
。我将其描述为 Mac 应用程序的标准 Cocoa 插件设置。
但是,有一件事有点不寻常。我正在使用 -bundle_loader
在构建时将插件包链接到我的主应用程序中的公共(public)符号的选项。我最初是在 Xcode 3 中设置的,它一直运行良好。
Xcode 是这样描述的 -bundle_loader
:
Bundle Loader
BUNDLE_LOADER
Specifies the executable that will be loading the bundle output file being linked. Undefined symbols from the bundle are checked against the specified executable like it was one of the dynamic libraries the bundle was linked with. [BUNDLE_LOADER, -bundle_loader]
在 Xcode 4 中,我仍然可以在调试和发布构建配置中成功构建和运行我的 Mac 应用程序。没问题。 (我通过将默认运行操作的构建配置设置为“调试”或“发布”来实现此目的)。两种配置都可以正常构建和运行。
这是我的问题:在 Xcode 4 中,我无法成功存档我的 Mac 应用程序。插件包不会在链接时(在构建过程中编译后立即)链接到主应用程序可执行文件。
我的存档操作设置为使用发布构建配置(当然)进行构建。正如我所提到的,使用运行操作的发布构建配置进行构建没有问题。仅在执行存档操作时才会出现此问题。
这是我在尝试存档时收到的链接错误(在编译第一个插件包的源代码后立即发生这种情况):
Ld /Users/<myusername>/Library/Developer/Xcode/DerivedData/Fluidium-ajljctlwoiqpcodskkcwxrxngeyo/Build/Intermediates/ArchiveIntermediates/Fake/InstallationBuildProductsLocation/Users/<myusername>/Library/Developer/Xcode/DerivedData/Fluidium-ajljctlwoiqpcodskkcwxrxngeyo/Build/Intermediates/ArchiveIntermediates/Fake/BuildProductsPath/Release/Fake.app/Contents/PlugIns/Tabs.fluidplugin/Contents/MacOS/Tabs normal x86_64
cd /Volumes/SystemY/Users/<myusername>/work/fluidium/trunk/Fluidium
setenv MACOSX_DEPLOYMENT_TARGET 10.6
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -bundle -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk -L/Users/<myusername>/Library/Developer/Xcode/DerivedData/Fluidium-ajljctlwoiqpcodskkcwxrxngeyo/Build/Intermediates/ArchiveIntermediates/Fake/BuildProductsPath/Release -F/Users/<myusername>/Library/Developer/Xcode/DerivedData/Fluidium-ajljctlwoiqpcodskkcwxrxngeyo/Build/Intermediates/ArchiveIntermediates/Fake/BuildProductsPath/Release -filelist /Users/<myusername>/Library/Developer/Xcode/DerivedData/Fluidium-ajljctlwoiqpcodskkcwxrxngeyo/Build/Intermediates/ArchiveIntermediates/Fake/IntermediateBuildFilesPath/Fluidium.build/Release/TabsPlugIn.build/Objects-normal/x86_64/Tabs.LinkFileList -mmacosx-version-min=10.6 -bundle_loader /Users/<myusername>/Library/Developer/Xcode/DerivedData/Fluidium-ajljctlwoiqpcodskkcwxrxngeyo/Build/Intermediates/ArchiveIntermediates/Fake/BuildProductsPath/Release/FluidApp.app/Contents/MacOS/FluidApp /Users/<myusername>/Library/Developer/Xcode/DerivedData/Fluidium-ajljctlwoiqpcodskkcwxrxngeyo/Build/Intermediates/ArchiveIntermediates/Fake/BuildProductsPath/Release/TDAppKit.framework/TDAppKit -framework Quartz -framework WebKit -framework Cocoa -o /Users/<myusername>/Library/Developer/Xcode/DerivedData/Fluidium-ajljctlwoiqpcodskkcwxrxngeyo/Build/Intermediates/ArchiveIntermediates/Fake/InstallationBuildProductsLocation/Users/<myusername>/Library/Developer/Xcode/DerivedData/Fluidium-ajljctlwoiqpcodskkcwxrxngeyo/Build/Intermediates/ArchiveIntermediates/Fake/BuildProductsPath/Release/Fake.app/Contents/PlugIns/Tabs.fluidplugin/Contents/MacOS/Tabs
Undefined symbols for architecture x86_64:
"_OBJC_IVAR_$_FUPlugIn.aboutInfoDictionary", referenced from:
-[FUTabsPlugIn aboutInfoDictionary] in FUTabsPlugIn.o
"_OBJC_CLASS_$_FUPlugIn", referenced from:
_OBJC_CLASS_$_FUTabsPlugIn in FUTabsPlugIn.o
"_OBJC_METACLASS_$_FUPlugIn", referenced from:
_OBJC_METACLASS_$_FUTabsPlugIn in FUTabsPlugIn.o
"_FUTabControllerProgressDidStartNotification", referenced from:
-[FUTabsViewController startObserveringTabController:] in FUTabsViewController.o
-[FUTabsViewController stopObserveringTabController:] in FUTabsViewController.o
"_FUTabControllerProgressDidChangeNotification", referenced from:
-[FUTabsViewController startObserveringTabController:] in FUTabsViewController.o
-[FUTabsViewController stopObserveringTabController:] in FUTabsViewController.o
"_FUTabControllerProgressDidFinishNotification", referenced from:
-[FUTabsViewController startObserveringTabController:] in FUTabsViewController.o
-[FUTabsViewController stopObserveringTabController:] in FUTabsViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
最后一点:我在充当“捆绑加载程序”的 Mac 应用程序目标上设置了以下build设置:
在复制过程中删除调试符号:否(对于调试和发布)
默认隐藏符号:NO(对于调试和发布)
最佳答案
解决了!
构建发布时,我的主应用程序目标上没有执行“Strip”阶段。但是,在存档时,在我的主应用程序目标上执行了“Strip”阶段。 (不知道为什么这是不同的,因为两者都是通过发布构建配置构建的,但确实)。
存档时的剥离阶段是插件无法通过bundle_loader链接的原因:符号已从主应用程序的二进制文件中剥离。
解决方案是在我的主应用程序(用作捆绑加载器的应用程序)的build设置中设置以下设置:
strip 样式:调试符号
关于Xcode:如何归档带有使用 -bundle_loader 进行链接的嵌入式插件包的 Mac 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10565439/
我的设置: Mac OS X 10.7.4 Xcode 4.3.2 我有一个 Mac OS X 应用程序,它加载嵌入式 Cocoa 可加载 bundle 以用作插件。这些插件包含在 Mac 应用程序的
我正在使用 xcode 6.0 和部署目标 7.0。 它给出了错误链接器错误。请给我解决方案。我厌倦了。 提前致谢 clang 错误文本: "-bundle_loader can only be us
我是一名优秀的程序员,十分优秀!