【发布时间】:2021-10-01 23:57:11
【问题描述】:
我想构建 pyobjc-7.3,因为它修复了 send2trash。 BigSur 20.5.0 上的经典建筑非常引人注目。
cd pyobjc-7.3/pyobjc-framework-Cocoa
python3 setup.py build
虽然一旦我在 nix-shell 中运行相同的构建,魔法就会发生。
nix-shell -p pkgs.python39Packages.setuptools
python3 setup.py build
clang-7:错误:编译期间未使用的参数: '-fno-strict-overflow' [-Werror,-Wunused-command-lin\ e-argument]
好的。没什么大不了。让我们禁用警告。
CFLAGS="-Wno-unused-argument" python3 setup.py build
什么?现在clang就像一只瞎了眼的小猫。
模块/pyobjc-api.h:19:10:致命错误:找不到“objc/objc.h”文件 #include
-isysroot 选项和-I 无效。
-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk
我注意到 clang 中 -I 标志添加了很多内容,例如:
-iwithprefix /Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/usr/include
它有助于 clang 找到 objc 头文件,尽管这还没有结束。
模块/pyobjc-api.h:21:9:致命错误:“Foundation/Foundation.h”文件 没找到
怎么会?! 哦,还有另一个特殊类型的头文件 - 框架。车轮改造...
clang,换个说法
-iframeworkwithsysroot /System/Library/Frameworks
在这里我遇到大量类型错误,我想不出下一步该尝试什么:
/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSString.h:138:1: 错误: 函数不能返回函数类型“NSComparisonResult”(又名“int (int)”)
- (NSComparisonResult)比较:(NSString *)字符串选项:(NSStringCompareOptions)掩码范围:(NSR...
【问题讨论】:
-
Nix 是一个“封闭式”构建系统,这意味着您必须指定所有依赖项。没有这些,构建将无法重现。如果你想打包 pyobjc,你可以在 Nixpkgs 中查看类似的包。如果您只想在
nix-shell中构建它,我建议您像打包它一样编写一个文件,这样您就可以在该文件中使用nix-shell。nix-shell -p只能设置buildInputs,限制太多了。