gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:15:58 26 4
gpt4 key购买 nike

我在 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 和 uint64_t 的 typedef。在 C(不是 C++)中构建时,如果 bool 没有另外定义,则它是 unsigned char 的 typedef。)

当我打电话时 sp_offline_sync_get_status , 仅 queued_tracks似乎有正确的数据,其余的都是垃圾。但是,如果我编辑头文件以包含 #pragma pack(1) ,它似乎给出了更合理的结果。即使当我尝试构建 spshell 时,我也会观察到这种行为。 libspotify 附带的示例。*

这让我相信 libspotify 二进制文件是使用一些与默认值不同的编译器标志编译的,至少在使用 Visual C++ 的 Windows 上是这样。我应该如何编译 C 或 C++ 代码以使用 libspotify?或者我应该在#include api.h 之前使用#pragma pack 然后将其恢复?我可以期望这在 libspotify 的 future 版本中保持稳定还是可能会改变?它如何跨平台变化?

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

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

最佳答案

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

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

关于spotify - libspotify 期望与打包相关的哪些编译器标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14260771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com