当前位置: 首页 > 知识库问答 >
问题:

libspotify期望哪些编译器标志与打包相关?

戴建义
2023-03-14

我在Windows上使用libspotify 12.1.51。虽然它基本上能按预期工作,但我对sp_offline_sync_status有一些困难

typedef struct sp_offline_sync_status {
  int queued_tracks;
  sp_uint64 queued_bytes;

  int done_tracks;
  sp_uint64 done_bytes;

  int copied_tracks;
  sp_uint64 copied_bytes;

  int willnotcopy_tracks;

  int error_tracks;
  bool syncing;

} sp_offline_sync_status;

sp_uint64是Windows上无符号__int64的typedef,否则uint64_t。在C(不是C)中构建时,如果bool没有其他定义,它是无符号char的typedef。)

当我调用sp_offline\u sync\u get_status时,只有排队的轨道似乎有正确的数据,其余的都是垃圾。然而,如果我编辑头文件以包含#pragma pack(1),它似乎会给出更合理的结果。即使在我尝试构建libspotify附带的spshell示例时,我也观察到了这种行为*

这让我相信libspotify二进制文件是用一些不同于默认值的编译器标志编译的,至少在使用Visual C的Windows上是这样。我应该如何编译C或C代码来使用libspotify?或者我应该使用#pragma pack before#包括api。然后把它恢复回来?我能指望这一点在未来版本的libspotify中保持稳定吗?或者它可能会改变吗?不同平台之间的差异如何?

我真正的目标是编写C#P/调用代码,使用Mono在各种平台上工作。在非Windows平台上,libspotify是否坚持本机编译器的默认对齐方式,还是需要在每个平台上指定自定义对齐方式?

[*]-不过,我确实必须先修复一些其他错误。正如libspotify 12.1.51中提供的那样,在Windows上spshell寄存器控制按键(例如shift、ctrl)作为键入NUL字符。这可以防止键入或粘贴Spotify URI到控制台。这可以通过编辑spshell_win32. c来修复添加case 0: break;console_input中的switch语句。此外,它在函数offline_status_updated中使用spshell. c中的字符串格式说明符“%zd”。Microsoft C运行时似乎无法处理此问题,因此需要对其进行更改(例如,如果您只想让它在Windows上工作,请将其更改为“%Iu”,或者更改为对平台敏感的宏)。

共有1个答案

赵光赫
2023-03-14

libspotify是用'-Zp4'编译的,而标准似乎是'-Zp8'。我想人们可以使用该标志编译,或者使用#pragma pack(4)指令(我实际上认为4比1更正确,正如您在问题中使用的那样)

将在Jira中添加注释以修复您指出的spshell. c中的错误。谢谢!

 类似资料:
  • 问题内容: 例如 当Eclipse编译Java源代码时,在哪里配置-g标志?(使用Ganymede,但我怀疑在以后的版本中已更改,因此任何答案都可能会有所帮助。) 我需要的是: -G 生成所有调试信息,包括局部变量。默认情况下,仅生成行号和源文件信息。 问题答案: 选择菜单:窗口>首选项> Java>编译器 在那里,您会在“类文件生成”标题下找到几个复选框。

  • 编译标志 编译标志让你可以修改正则表达式的一些运行方式。在 re 模块中标志可以使用两个名字,一个是全名如 IGNORECASE,一个是缩写,一字母形式如 I。(如果你熟悉 Perl 的模式修改,一字母形式使用同样的字母;例如 re.VERBOSE的缩写形式是 re.X。)多个标志可以通过按位 OR-ing 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志: 这有个可用标志表,对

  • 主要内容:桌面操作系统,嵌入式系统在上节《 C语言编译和链接》中我们已经讲解了C语言编译器的概念,由于C语言的历史比较久,而且早期没有规范,整个计算机产业也都处于拓荒的年代,所以就涌现了很多款C语言编译器,它们各有特点,适用于不同的平台,本节就来给大家科普一下。 我们分两部分介绍C语言的编译器,分别是桌面操作系统和嵌入式操作系统。 桌面操作系统 对于当前主流桌面操作系统而言,可使用 Visual C++、 GCC 以及 LLVM

  • 主要内容:1) 源文件(Source File),2) 工程/项目(Project),3) 工程类型/项目类型,4) 链接(Link)上节我们介绍了编译器和 IDE 的概念,大家肯定希望赶紧实践一下,用 IDE 真正地运行一段C语言代码来看看效果,这样能够更快地获得成就感。 但是,使用 IDE 的过程中会涉及到一些与编程有关的概念,这些概念如果不提前了解,即使能够运行出程序来,也是雾里看花,知其然不知其所以然。本节的目标就是让大家对这些概念有一个简单的了解。 1) 源文件(Source File

  • null 缺点: -o0标志将影响整个代码,而关键字只影响特定变量。例如,如果我们在一个小型微控制器上工作,这可能是一个问题,因为使用-o0可能会产生一个大的可执行文件。

  • 本文向大家介绍HTML5图像相关的标签有哪些?相关面试题,主要包含被问及HTML5图像相关的标签有哪些?时的应答技巧和注意事项,需要的朋友参考一下 最常用的就是 img 标签了。 map 和 area 创建点击热点,可参考张鑫旭老师的文章: https://www.zhangxinxu.com/wordpress/2017/05/html-area-map/ audio 音频标签,video 媒体