问题标签 [otool]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - 如何在不通过 brew 安装的情况下使用`psql`
我想psql
独立使用该实用程序,而不通过 brew 或其他方式安装 postgress(我有我的理由)。我在 OS X 上使用 psql 版本 9.5.3,它与 PostgressApp 一起分发。
当我只分发 psql 时,我收到错误:
使用命令otool -L psql
我发现库的路径仍然指向 Posgres.app,所以我用install_name_tool
工具更改了它,我还检查了所有引用的库并修复了它们。
但是,我仍然收到相同的错误消息。任何人都知道如何解决这个问题?
还是通往工作独立psql
二进制文件的另一条途径?
macos - 如何命令行从 Qt 应用程序中为 OSX 构建 .app 二进制文件?
我正在准备一个 shell 脚本来将我的 QtApp 构建为 OSX 的 .app。我在我的脚本中执行以下操作
我得到了 MyApp.app。到这里为止都很棒!但是当我双击打开它时,我收到以下错误:
You can’t open the application “MyApp.app” because it is not supported on this type of Mac.
我试图围绕这个问题进行搜索。看起来我需要在我的脚本中添加更多与otool
&相关的代码行,install_name_tool
如 Qt 的以下官方链接中所述:http:
//doc.qt.io/qt-5/osx-deployment.html#macdeploy
它公平地解释了哪些工具和在 Qt 下工作以获得最终的 .app,但我无法弄清楚到底要在我的脚本中放入什么,以便我得到一个与 Qt 库静态链接的 MyApp.app,该库在我的构建后的osx机器。
问题:
有人可以指出在 macdeployqt 命令之后要在我的脚本中添加什么来获得适用于 OSX 的正确 MyApp.app 吗?
顺便说一句,otool
在 MyApp 上运行命令会给出以下输出:
xcode - 如何使用 otool 检查是否启用了位码
我现在正在玩 otool 一个小时,但如果二进制文件启用了位码,我不知道如何获取信息。
它尝试了以下方法:
首先,我构建了一个简单的 iOS 应用程序并运行:
之后我从kontakt.io下载了一个二进制框架。我确定启用了位码。所以我尝试了:
我也没有回信息。我有什么问题吗?这是新 Xcode8 的错误吗?
我玩这个的原因是,我已经构建了一个二进制框架,但我不知道为什么有时该框架完全启用了位码,而有时却没有。
ios - 苹果应用商店拒绝;如何查找哪个库具有引用“transition:didComplete:”的字符串
我们被苹果拒绝了。一直发生对吗?但这一次我们有点难过。解决这个问题的旧方法并没有为解决方案提供线索。
来自苹果:
- 5 性能:软件要求
性能 - 2.5.1
您的应用使用或引用以下非公共 API:
过渡:完成:
App Store 不允许使用非公共 API,因为如果这些 API 发生变化,可能会导致糟糕的用户体验。
这个应用程序已经有大约五年了,多年来,主要是由于业务需求,它有很多对 3rd 方 SDK 的引用。这是我们集中注意力的地方,但是线索很快就干涸了,并且正在变成大量删除所有内容,直到我们找到包含此旧代码的部分。
我们所知道的是它不是一个符号, otool
也nm
没有找到任何东西。strings
确实找到了一个匹配项(调试版本中的 1 次,我们的最终版本版本中的 2 次,如果这是一个线索或有所不同的话。)这似乎是 UIKit 的调用,所以我假设情况并非如此。
有人对如何进行有任何建议吗?
我们正在检查项目中引用的每个存档/lib/binary,并进行字符串搜索。如果失败了,我们将撕掉每个 SDK 并进行破坏性的二进制搜索以找到有罪的一方......如果有关于如何解决这个问题的热门提示,我会全力以赴!
这是命令行输出(字符串、otool 和 nm):
xcode - 在 Xcode 创建应用程序二进制文件后删除框架和框架的链接
我想在 Xcode 中构建同一个应用程序的 2 个版本,一个有 Sparkle 框架,一个没有 Sparkle 框架。我不想维护一个单独的目标。相反,我想使用 2 个独立的方案,它们依赖于 2 个独立的构建配置(嗯,总共 4 个,因为我将使用一个用于调试构建,一个用于发布构建)。
据我所知,问题在于“构建阶段”中的“复制捆绑资源”和“链接二进制”步骤对于给定目标上的所有方案都是相同的。
因此,我看到的唯一选择是在构建之后(和签名之前)运行一个脚本,该脚本将:
- 从应用程序包中删除框架。
- 取消框架与可执行文件的链接(如 列出的
ottol -L
)。
有什么建议么?
xcode - 运行 macdeployqt 时出现分段错误
为了在另一台 Mac 上运行我的 Qt 应用程序,我的.pro
文件中有以下两行
这适用于简单的 HelloWorld 应用程序。它曾经也适用于我的“真实”应用程序,但现在我收到以下错误(我的应用程序在我的本地 Mac 上运行良好,没有这两行)
在弹出的问题报告窗口中,我看到了(不确定我是否选择了其中的相关部分)
任何想法这里可能有什么问题?我最近升级到 XCode 8(并再次降级到 7.3),从 Qt5.6 升级到 5.7,但我不知道如何继续。
关于我可以尝试的提示将是最有帮助的!
macos - macOS 上的动态链接:ImageIO.framework 从错误的路径中查找?
重启我的开发机器后,我的 Rust 项目停止在 macOS 上运行。错误信息是:
我完全不知道发生了什么变化并导致了这种情况。问题似乎出在我的装备上,而不是代码上,因为它在 Docker 容器上运行良好,并且较旧的提交拒绝在我的计算机上运行。另一件事是我的项目不应该使用任何图像处理库。(而且我不知道如何列出 macOS 上的传递动态依赖项以检查它是否确实如此。)
otool -L /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
显示ImageIO
链接到/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib (compatibility version 1.0.0, current version 1.0.0)
. 该文件确实存在。/usr/local/lib/libjpeg.dylib
(我的 FS 不区分大小写)也存在,但它是自制文件的符号链接../Cellar/jpeg/8d/lib/libjpeg.dylib
,因此显然系统库不应该使用它。但是,据我所知,我没有设置LD_LIBRARY_PATH
或任何其他 env var 应该强制 macOS/usr/local/lib
用作 dylib 搜索路径。
所以我的问题是:
1)macOS上是否有工具可以检查我的项目中的哪些库链接(可能是可传递的)到ImageIO.framework
?
2) 在 macOS 上如何配置 dylib 搜索路径?是否有工具可以检查搜索了哪些路径以及以哪种优先顺序?问题本身可能是由于一些 Homebrew 问题,但我希望有工具来诊断和理解它。
c++ - 使用 otool 在重构代码中进行二进制比较
我正在重构 C++ 代码,删除using namespace std;
和添加std::
字符串、向量等。我希望输出在二进制方面是相同的,但cmp
即使是最小的更改也会产生差异。我求助于反汇编 usingotool
但在地址中遇到奇怪的偏移量。
例如,有了这个变化
otool -XVt
给出一个奇数地址偏移:
它从字面上改变了所有的addies +/-0x10。有没有办法防止这种情况?为什么它首先发生?
还原上述更改并重新编译会得到原始地址,因此地址选择可能不是“随机”问题。
ios - 使用 Bitcode 重新编译更改 LC_ID_DYLIB
我正在从 iOS 的源代码构建一个动态框架,并启用了位码(使用cmake
和xcodebuild
)。我使用lipo
andinstall_name_tool
制作一个胖二进制文件和 update LC_ID_DYLIB
,以便正确加载二进制文件。当我归档应用程序时,框架已正确签名并与应用程序打包在一起。这是的输出file
:
查看otool -l
输出LC_ID_DYLIB
显示:
这一切似乎都是正确的。如果我将此档案上传到 App Store,它会被正确上传和处理。从 App Store 运行它后,由于加载了动态框架,它在启动后立即崩溃。众所周知,应用程序是从 App Store 上的 Bitcode 重新编译的,所以我通过导出为 Ad-Hoc 并按照Technical Note TN2432中的建议启用“Rebuild from Bitcode”选项来模拟这一点。检查 .ipa(启动后也崩溃)和有问题的框架,这是以下输出otool -l
:
所以很明显LC_ID_DYLIB
这个库的 是不正确的,这是框架最初构建位置的绝对路径,然后再制作一个胖二进制文件。这在Rebuild from Bitcode步骤中被替换,但我不知道为什么甚至不知道此路径存储在现有Mach-O文件中的位置。我使用otool
和objdump
工具试图在 Mach-O 二进制文件中找到引用,但没有运气。
实际上,另一个框架依赖于这个框架,这是目标框架的加载命令:
再次使用 Bitcode 重建后,这里的引用也发生了变化:
这只发生在有问题的框架上,但不会发生在其他框架上,@rpath
它保持原样。
我的问题仍然存在:
这个绝对路径引用存储在哪里?以及如何删除它,因此 Rebuild from Bitcode 不再影响它了?
谢谢!
ios - 拒绝应用程序后解释 nm 输出
我的应用被 Apple 拒绝了,因为不知何故我的应用使用了私有 API。苹果说我的应用程序使用
框架:'/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation':CFHashBytes
我在代码中找不到任何东西,所以我搜索了 stackoverflow 并发现我可以使用 otool 或字符串。
使用字符串,我找到两个“哈希”调用(无论它们在哪里)并使用 nm,我得到以下输出:
nm 运动型\建筑师 | grep 哈希
0000000100077490 T __TFO16Sporty_Architect12ActivityTypeg9hashValueSi 0000000100056240 T __TFO16Sporty_Architect12RotationModeg9hashValueSi 0000000100064480 T __TFO16Sporty_Architect13DraggedSliderg9hashValueSi 000000010003e3a0 T __TFO16Sporty_Architect8FileTypeg9hashValueSi 000000010003d910 T __TFO16Sporty_Architect9DateRangeg9hashValueSi 0000000100021360 T __TFO16Sporty_Architect9ModelModeg9hashValueSi U __TFSig9hashValueSi 00000001000777b0 T __TTWO16Sporty_Architect12ActivityTypes8HashableS_FS1_g9hashValueSi 00000001000562e0 T __TTWO16Sporty_Architect12RotationModes8HashableS_FS1_g9hashValueSi 0000000100064500 T __TTWO16Sporty_Architect13DraggedSliders8HashableS_FS1_g9hashValueSi 000000010003e9d0 T __TTWO16Sporty_Architect8FileTypes8HashableS_FS1_g9hashValueSi 000000010003e080 T__TTWO16Sporty_Architect9DateRanges8HashableS_FS1_g9hashValueSi 0000000100021500 T __TTWO16Sporty_Architect9ModelModes8HashableS_FS1_g9hashValueSi
我认为 U __TFSig9hashValueSi 是它,不是吗?但现在的问题......我怎样才能进一步缩小范围?
这超出了我的理解,为什么 Apple 提供了一个验证按钮,显示一切正常,并且一旦应用程序处于审核状态,它就会因为某些事情而被拒绝,这可以在编译时清楚地检测到(或至少在提交时)。