0

我正在尝试利用LibUSB与我构建的小型可编程 LED 设备进行交互。我在 Windows 上使用 libusb-win32 端口有工作代码,但在将其移植到 MAC 时遇到问题。

我已经将 LibUSB 克隆到本地 git 存储库并使用 XCode 编译它,我认为这是 MAC 上的首选方法。经过一番挖掘(包括显示隐藏Library文件夹),它看起来像 XCode 输出到/Users/jon/Library/Developer/Xcode/DerivedData/libusb-ekndohtauywugtgjlolqmmdyoafq/Build/Products/Debug/libusb-1.0.0.dylib.

所以我的问题是,我怎样才能在 XCode 中创建一个简单的控制台应用程序(或者如果有更简单的方法可以创建其他东西)链接到该库并调用 libusb 库中的函数(例如libusb_init(libusb_context **ctx);)?

4

4 回答 4

2

与其使用 Xcode 从头开始​​构建 libusb,您可能应该以传统方式构建它(就像在 Linux 上那样),或者更好的是,从Homebrew或 MacPorts 预先构建它。然后只需以正常方式将相关的头文件和库添加到您的 Xcode 项目中。

另请参阅:如何在 Mac OS X 上设置 libusb?.

于 2014-11-28T08:12:32.657 回答
1

几天来,我一直在尝试在我的 Xcode 项目中使用 libusb 感到沮丧。开始很简单: 1. 从 github 下载 libusb-1.0.20;2. 运行 .configure、.make 和 .install - 没有错误;3. 将 libusb.dylib 从 /usr/local/lib 拖到我的项目中,选择复制选项。Xcode 自动将 libusb.dylib 添加到链接框架和库中;4.将libusb.h从build目录拖到我的项目中

在我将应用程序提交到应用商店之前,项目将毫无错误地构建和运行。然后我了解到 dlopen 正在尝试从 /usr/local/lib/libusb.dylib 加载。此外,如果我将 dylib 文件显式添加到复制文件构建阶段,Xcode 只会将其复制到我的目标包。

在阅读了大量应该很容易的文档之后,我发现没有简单的方法可以让 dlopen 从我的应用程序包中加载库。商店应用程序必须完整。他们不能让用户已经在他们的系统上安装了 libusb。

谢谢,鲍勃·赖斯

于 2016-01-08T21:06:09.110 回答
0
  1. 复制libusb.h到您的项目中。
  2. 复制lib-1.0.0.dylib到您的项目框架路径列表中,将其设置为“必需”
    在 Xcode 中,您将在Project Settings > GeneralFrameworks, Libraries, and Embedded Content下找到现在应该列出lib-1.0.0.dylib的点。

正如文件名所暗示的,它是一个动态库,意味着您在运行时加载它。

这也意味着它不需要位于Project Settings > Build Phase > Link Binary with Libraries列表中。因为那里的任何东西通常都是静态链接的。如果你把它放在那里,你的链接器将尝试在系统或 usr 库文件夹下找到它。

因此,如果未安装 lib - 这将失败,并且您在YourApp/Contents/Frameworks中部署的dylib几乎会被忽略。所以没有必要把它额外放在Link Binary with Libraries

  1. 而是动态加载它并要求正确的文件夹来这样做..
    (这里是一个Objective-C项目)
#import "libusb.h"
#include <dlfcn.h>

// and at appropriate place in code
NSString *privateFrameworksPath = [[NSBundle mainBundle] privateFrameworksPath];
NSString *libpath = [privateFrameworksPath stringByAppendingString:@"/libusb-1.0.0.dylib"];
const char *dylibPath = libpath.UTF8String;
void *handle = dlopen(dylibPath, RTLD_LAZY);
...
dlclose(handle);
于 2021-10-23T12:38:27.493 回答
0

在我的情况下,我从 Build Settings -> Header Search Paths 添加了标题。在这里,您必须添加头文件。我正在使用 brew 来管理软件包,所以我住在这里:/usr/local/Cellar/libusb/1.0.24/include/libusb-1.0

然后在 Build Settings -> Framework Search Paths 添加库本身的路径,例如:/usr/local/Cellar/libusb/1.0.24/lib

您必须添加到库搜索路径的相同路径。

然后在 Build Phases -> Link Binary With Libraries 中,单击“+”添加文件,添加其他 -> 添加文件,然后导航到库所在的目录并选择“.a”文件,在我的情况下“/usr/local/Cellar/libusb/1.0.24/lib”并选择“libusb-1.0.a”,我就可以构建项目了。

于 2022-02-19T02:52:39.430 回答