天道酬勤,学无止境

dylib

在 ios 上调用 dlopen(Calling dlopen on ios)

问题 这是一个经常被谈论的话题,尤其是最近。 希望这不是一个骗局,因为我已经解决了所有其他 SO 问题。 我对这是否合法不感兴趣。 虽然不是 100% 清楚您是否可以在 iOS8 上自由地使用 dylib 做您想做的事情,但似乎允许一定数量的动态加载(例如,请参阅您能否为 iOS 构建动态库并在运行时加载它们?)。 我关心的只是让 dlopen 工作(暂时忘记商店提交)! 我有一个非常基本的 iOS 示例,其中我手动执行 dlopen,然后执行 dlsym 以调用本地 dylib 中的函数。 这在模拟器上运行良好,但在设备上失败。 该设备是运行(未越狱)iOS 7.1.2 的 iPhone 4s。 AFAIK 即使在 iOS 7 上调用 dlopen 也是合法的,因为有明确的 Apple 说明来说明如何支持此操作(请参阅此处的“将包含应用程序部署到较旧版本的 iOS”https://developer.apple.com/library/prerelease/ ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW3)。 我的猜测是根本原因很简单,比如 dylib 位于 iOS 不喜欢二进制文件的文件夹中。

2021-09-18 15:49:31    分类:技术分享    ios   iphone   dylib

App Store 是否允许带有嵌入式 dylib 的 iOS 8 应用程序?(Are iOS 8 apps with embedded dylibs allowed on the App Store?)

问题 “iOS 8 现在支持动态框架”是否意味着允许 App Store 提交? 似乎以前的开发人员能够将 dylib 用于内部应用程序,但在提交给 App Store 的内容中使用它们会让您被拒绝。 情况仍然如此,还是 iOS 8 中的此更改可以解决此问题? 例如,如果我使用 OpenCV 编写了一个应用程序,现在是否可以针对 OpenCV dylib 进行构建和发布(假设我将 OpenCV 构建为 dylib)而不是静态链接? 我很感兴趣,因为我们有一个现有的基于 Qt 的框架,它本身有几个我们目前为 Linux、OS X、Windows 和 Android 构建的共享库。 对于 iOS,似乎我们需要更改此设置以构建一个包含我们所有组件和静态链接的 Qt 的单个应用程序。如果 iOS 应用程序和 App Store 开始支持(嵌入)动态库,那么我们的 iOS 版本可以提供所有组件作为动态库,就像我们在所有其他平台上所做的一样。 有关的: “Embedded dylibs/frameworks only run on iOS 8 or later”警告的后果 Apple 是否允许 iOS 上的 Qt 作为动态库? http://www.wenda.io/questions/333265/are-private-frameworks-supported-on-ios.html

2021-09-17 08:37:37    分类:技术分享    c++   ios   qt   app-store   dylib

Mac 动态库疯狂(可能仅限 Fortran)(Mac Dynamic Library Craziness (May be Fortran Only))

问题 我有这个 fortran 90 文件(将代码添加到问题的底部),我使用以下命令将其编译到 OS X Mavericks 上的动态库中: gfortran -dynamiclib trianglepy.f90 -o libtriangle.dylib 。 这将生成存储在我的桌面上的 libtriangle.dylib。 我可以使用这个库制作一个 C++ 文件(代码附在底部)。 我比使用g++ main.cpp -o main -std=c++11 -L ~/Desktop/ -ltriangle编译代码。 这完美地编译了代码。 但是当我运行生成的可执行文件时,出现以下错误: dyld: Library not loaded: libtriangle.dylib Referenced from: /Users/zacharykraus/./main Reason: image not found Trace/BPT trap: 5 当我运行otool -L main我得到 main: libtriangle.dylib (compatibility version 0.0.0, current version 0.0.0) /opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0, current

2021-09-16 02:24:18    分类:技术分享    c++   macos   fortran   dylib

切换到 OpenCV 的自制软件后,Xcode 找不到 dylib(Xcode can't find dylibs after switching to homebrew for OpenCV)

问题 我的应用程序使用自制软件安装的 OpenCV 运行良好。 在尝试使应用程序可分发时,我使用普通的 Cmake 编译并安装了 OpenCV。 这不起作用,我删除了 Cmake 创建的文件,并恢复到我最后一次“工作”提交。 但是,现在我的应用程序将不再运行,并且抱怨找不到所需的 dylib: dyld: Library not loaded: /usr/local/opt/opencv/lib/libopencv_core.2.4.5.dylib 我在我的 Xcode 项目中根本没有提到“/usr/local/opt”,通过目录的全文搜索证实了这一点。 这是从哪里得到的? 但是,我有一个非常好的 OpenCV 2.4.5 的 Homebrew 安装。 据我所知,有三个地方可以告诉 Xcode 去哪里寻找库: 在“构建阶段”下,“将二进制文件与库链接” 在“Build Settings”下,“Library Search Paths”(设置为/usr/local/Cellar/opencv/2.4.5/lib) Unser "Build Settings", "Header Search Paths" (设置为/usr/local/Cellar/opencv/2.4.5/include) 所有这些都设置为正确的自制软件安装路径。 回答1 弄清楚了。 首先,我没有正确卸载 cmake

2021-09-13 04:38:05    分类:技术分享    xcode   macos   opencv   dylib

When building a Swift command-line tool with associated Swift library why is the Framework being embedded?

I've built a simple Swift project that produces a macOS command-line tool and has an associated custom Swift library (.dylib) but when compiling and running it there's a number of warnings that show up of the form: objc[9532]: Class _SwiftNativeNSEnumeratorBase is implemented in both /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftCore.dylib (0x100cca3f0) and /Users/.../Build/Products/Debug/MyTool (0x1003e84c0). One of the two will be used. Which one is undefined. Scanning the resulting MyTool binary shows that it contains that

2021-09-07 16:44:22    分类:问答    swift   xcode   dylib

How to access and use a dylib in an Obj-C application?

I've made a dylib that contains the following code: Test.h: #import <Cocoa/Cocoa.h> @interface Test : NSObject { int number; } -(void)beep; -(void)giveInt:(int)num; -(int)takeInt; @end Test.m: #import "Test.h" @implementation Test -(void)beep { NSBeep(); } -(void)giveInt:(int)num { number = num; } -(int)takeInt { return number; } @end I've compiled the dylib and put it in another project but I can't seem to figure out how to make a Test object from the dylib and call some of the methods. Anyone know how to do this? Thanks, Matt

2021-09-03 11:39:16    分类:问答    c   macos   dylib

如何确定 OS X dylib 是否与 -flat_namespace 链接(How to determine if an OS X dylib was linked with -flat_namespace)

问题 我有一个第三方 OS X dylib,我在我的应用程序中使用它并且无法轻松访问其创建者。 我想确定它是否与 -flat_namespace 链接。 那可能吗? 如果是这样,如何? 回答1 在库上运行otool -hV 。 如果您没有看到TWOLEVEL ,则它与-flat-namespace相关联。 例如: twolevel.dylib: Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 X86_64 ALL 0x00 DYLIB 8 672 NOUNDEFS DYLDLINK TWOLEVEL NO_REEXPORTED_DYLIBS 相对 flat.dylib: Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 X86_64 ALL 0x00 DYLIB 8 672 DYLDLINK NO_REEXPORTED_DYLIBS

2021-09-01 15:00:21    分类:技术分享    xcode   macos   dynamic-linking   dylib   dyld

Xcode can't find dylibs after switching to homebrew for OpenCV

My application was running fine using homebrew-installed OpenCV. In trying to make the application distributable, I compiled and installed OpenCV using plain Cmake. This didn't work, I deleted the files created by Cmake, and reverted to my last "working" commit. However, now my app won't run anymore and it complains of not finding required dylibs: dyld: Library not loaded: /usr/local/opt/opencv/lib/libopencv_core.2.4.5.dylib I have no reference to "/usr/local/opt" in my Xcode project at all, confirmed by a full-text search of the directory. Where is it getting this? However, I have a perfectly

2021-09-01 13:35:29    分类:问答    xcode   macos   opencv   dylib

Stripe iOS SDK via Swift Package Manager is installing, but crashing because “Library not loaded”

I am using Xcode 12, iOS 14, everything builds correctly, but when I am installed on the device and about to run, I get a message saying "dylib: Library not loaded:" dyld: Library not loaded: @rpath/Stripe.framework/Stripe Referenced from: /private/var/containers/Bundle/Application/31B00354-2E1E-4385-8317-5518588873F7/MyApp.app/MyApp Reason: image not found dyld: launch, loading dependent libraries DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library

2021-08-31 21:39:51    分类:问答    stripe-payments   dylib   swift-package-manager   build-settings

制作一个 64 位共享库,动态链接到 Mac OS X Snow Leopard 上的 32 位库(Making a 64 bit shared library that dynamically links to a 32 bit library on Mac OS X Snow Leopard)

问题 更新:经过更多阅读后,我发现这个问题非常普遍,您不能在同一进程中混合架构,因此 64 位 Java 不能dlopen()像 FMOD 这样的 32 位库。 是否有任何可能的解决方法,请记住我正在为 FMOD 库编写自己的 C 接口? 我需要在 Max OS X 上制作 64 位 dylib,因为 Java Native Access 只喜欢 64 位机器上的 64 位库。 问题是,我的 C 源代码动态包含 FMOD,它在 Mac 上仅提供 32 位 dylib。 当我尝试在没有 -m32 选项的情况下进行编译时(因为我必须输出 64 位 dylib),我收到以下错误: gcc -dynamiclib -std=c99 -pedantic -Wall -O3 -fPIC -pthread -o ../bin/libpenntotalrecall_fmod.dylib ../../src/libpenntotalrecall_fmod.c -lfmodex -L../../lib/osx/ ld: warning: in /usr/lib/libfmodex.dylib, missing required architecture x86_64 in file Undefined symbols: "_FMOD_System_CreateSound", referenced

2021-08-31 07:03:23    分类:技术分享    c   macos   64-bit   shared-libraries   dylib