当我使用 Xcode 9 构建用 Swift 4 编写的简单菜单栏 cocoa 应用程序时,许多 libswift*.dylib 库被链接/下载/嵌入到 .app 包中,进入 Frameworks 文件夹,如下所示:
我只在我的项目中使用import Cocoaand import Foundation,以及一些 @objc 函数作为计时器函数的选择器。我真的不认为我非常简单的菜单栏应用程序需要一些 3D 渲染 Metal 库函数或任何 SwiftOnoneSupport,所以我希望将它们从 .app 包中删除。(相同的库也包含在帮助程序应用程序中,用于在登录时启动功能,这甚至使帮助程序应用程序超过 10 MB)
我本以为 Xcode 实际上会默认复制所需的内容。这里和这里提出了一些类似的问题,但我认为这两个问题都没有令人满意的最新答案。
到目前为止我已经尝试过的
我设置ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES为NOin Build Settings. 好像没有什么效果。
我设置LINK_WITH_STANDARD_LIBRARIES为NOin Build Settings. 它毁了一切,无法构建它,即使我尝试在“链接框架和库”部分下自己添加一些框架(Cocoa、Foundation)。
我试图在XCode中创建一个mac应用程序,它在动态库中有一些实现.
我在我的XCode可可项目中添加了一个新的目标(动态库),在与框架和预编译头文件进行了一些斗争之后,进行了dynlib编译 - 并从调试器中成功运行.
当独立运行时,显然dynlib处于错误的位置."未加载库:/usr/local/lib/testlib.dynlib".在Windows上 - 我更常用的平台 - Dll可以放在与exe相同的文件夹中,也可以放在系统路径的任何位置.
我宁愿我的应用程序在其应用程序包中的某处找到它的dynlib(并且某些文档似乎证实这是正确的方法),但我不知道如何.
是否可以在XCode中配置项目,以便dylib实际上被复制到应用程序包中,在应用程序将查找它的位置?
看来我不需要使用otool来重置搜索路径.如果我编辑目标信息 - >构建 - >部署 - >安装目录,我可以从XCode内部更改dyld将为dylib查看的路径.默认情况下,新的动态库项目的路径设置为/usr/local/lib.我已经改为./- otool确认./现在是dyld将要寻找这个特定动态模块的地方.不幸的是./似乎并没有实际引用我的应用程序包中的任何目录:(
所以,我的问题(在其他线程中没有回答)现在是:1.如何在目标信息 - > ... - >安装目录设置中输入有意义的相对路径,以及2.如何自动获取XCode将dylib'target'复制到相对位置的应用程序包目标的bundle文件夹中?
我的应用程序在10.6上构建并运行良好.我将Base SDK设置为10.6,将Mac OS X部署目标设置为10.5.
我的应用程序使用系统libcurl.dylib - 而不是将dylib添加-lcurl到项目中,我只是添加到构建设置中的链接器标志.(虽然我已经尝试过两种方式.)
当我在10.5.8上启动应用程序时,出现以下错误
Dyld错误消息:未加载库:/usr/lib/libcurl.4.dylib
参考自:/ Applications/My Application.app/Contents/MacOS/MyApplication
原因:库版本不兼容:
MyApplication需要6.0.0或更高版本,但libcurl.4.dylib提供5.0.0版
果然,如果我otool -L是应用程序的二进制文件,我会得到以下libcurl:
/usr/lib/libcurl.4.dylib(兼容版本6.0.0,当前版本6.1.0)
有没有办法绕过这个,或者我应该静态链接我自己的libcurl构建?
我有一个dylib,我可以通过注入mac os x加载.构造函数调用运行良好.
__attribute__((constructor))
static void initialize()
Run Code Online (Sandbox Code Playgroud)
但析构函数不会被调用?因此资源初始化泄漏.
__attribute__((destructor))
static void destroy()
Run Code Online (Sandbox Code Playgroud)
是否可以在添加regexp功能的情况下重建libsqlite3.dylib?或者使用create_sqlite_function来做到这一点?
我是PCSC驱动程序开发的新手,我有一台Mac OSX 10.8.4(山狮),它有PCSC Framework 1.4.0版.
我有一个智能卡,我有库或c代码,我可以读取和写入卡(即获得ATR等)
我想知道配置PCSC的过程,以便PCSCD识别智能卡
我试图创建一个与卡通信的c代码的dylib(动态库),并在/etc/reader.conf中创建了一个条目,并将dylib放在指定的路径中.但是当我做pcscd -afd时,我仍然无法得到任何回复(即获得ATR).
任何建议或链接都会有所帮助
我正在尝试使用Xcode编译使用多个库的应用程序.为此,我创建了一个脚本,将我.dylibs从计算机上的所有位置Frameworks复制到应用程序包中的文件夹.添加必要的经过linker flags和header search paths我现在必须加我library search paths.
由于我已经复制了我的应用程序包的Frameworks文件夹中的所有库,因此我推断出我必须添加$(FRAMEWORKS_FOLDER_PATH)到该library search paths设置中.添加此项失败,因为链接器无法找到该目录.
我猜测Frameworks直到搜索完library search paths设置后才会创建该文件夹.如果是这样,我应该如何使用我在我的应用程序包中复制的库?
我创建了lib.dylib动态库.我想在我的应用程序中使用该库.什么是构建设置和构建阶段设置是必需的?在objective-c中使用库的步骤.
如何以可移植的方式在Mac OSX上使用OpenMP编译C ++代码?
有许多资料来源建议在OSX上使用OpenMP编译C ++的解决方案,例如:
他们中的大多数建议安装更新的LLVM / Clang(或GCC),而不是默认的Clang。在OSX 10.12.6(Sierra)上,使用LLVM(通过brew install llvm)对我有效。
但是,生成的二进制文件似乎不可移植。如果可能的话,我想提供一个二进制文件,这样我的用户就不必自己编译。
运行otool -L my_binary收益
/usr/local/opt/llvm/lib/libomp.dylib (compatibility version 5.0.0, current version 5.0.0)
/usr/local/opt/llvm/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
/usr/lib/libc++abi.dylib (compatibility version 1.0.0, current version 307.2.0)
Run Code Online (Sandbox Code Playgroud)
前两行看起来并不像我可以将二进制文件交给某些用户,并希望它能工作。用户必须先安装LLVM。
因此,我发现install_name_tool可以改变这一点。参见https://blogs.oracle.com/dipol/dynamic-libraries,-rpath,-and-mac-os
因此,我跑了
cp /usr/local/opt/llvm/lib/libomp.dylib .
cp /usr/local/opt/llvm/lib/libc++.1.dylib .
install_name_tool -change /usr/local/opt/llvm/lib/libomp.dylib @executable_path/libomp.dylib my_binary
install_name_tool -change /usr/local/opt/llvm/lib/libc++.1.dylib @executable_path/libc++.1.dylib my_binary
install_name_tool -id "@loader_path/libomp.dylib" …Run Code Online (Sandbox Code Playgroud) 我有一个具有以下结构的项目:
Cargo.toml
my_script.py
my_lib:
- Cargo.toml
- src
my_bin:
- Cargo.toml
- src
Run Code Online (Sandbox Code Playgroud)
哪里:
my_lib 是一个Rust库 crate-type = ["dylib"]my_bin 是一个Rust二进制应用程序,使用 my_libmy_script.py 是Python 3脚本,也使用 my_lib根目录Cargo.toml包含一个基本的工作区声明:
[workspace]
members = [
"my_lib",
"my_bin"
]
Run Code Online (Sandbox Code Playgroud)
如果我执行cargo build和,一切都会正常进行cargo run -p my_bin。问题来自Python脚本。
在此脚本中,我my_lib使用以下代码加载lib文件:
[workspace]
members = [
"my_lib",
"my_bin"
]
Run Code Online (Sandbox Code Playgroud)
如果我使用库目录(./my_lib/target/...)中的库文件,则脚本在加载库和执行其功能时没有问题。
但是,如果我使用工作空间目录(./target/...)中的库文件,则在尝试加载库时出现以下错误:
from ctypes import cdll
from sys import platform
if platform == 'darwin':
prefix = 'lib' …Run Code Online (Sandbox Code Playgroud)