GCC Mac OS X框架搜索路径:/ System/Library之前/ Library?

Mik*_*hin 5 macos gcc

我正在尝试在Mac OS X上编译一个链接到Python的项目.我有Python 2.7框架/Library/Frameworks.我为Mac OS X 4编译,所以我也有Python 2.3 /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks.如果我调用gcc-F/Library/Frameworks和偷看什么用呢-v,我看到以下内容:

ignoring duplicate directory "/Library/Frameworks"
  as it is a non-system directory that duplicates a system directory
<skipped>
#include "..." search starts here:
#include <...> search starts here:
 <skipped>
 /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks (framework directory)
 /Developer/SDKs/MacOSX10.4u.sdk/Library/Frameworks (framework directory)
Run Code Online (Sandbox Code Playgroud)

即它忽略了我,/Library/Frameworks因为它是一个副本(最后一个路径,它是一个符号链接/Library/Frameworks)然后在我的2.7之前找到它自己的Python 2.3框架.

我理解如何解决这个问题(例如使用-I包含目录的完整路径),但我对搜索顺序感到有些困惑.例如,链接器(ld)似乎以不同的顺序搜索系统/库和库.我试过检查手册和谷歌,但显然,我的技能太低了:)

我想我的问题是:

  • 这是正常行为吗?为什么gcc按此顺序ld搜索,而搜索方式不同?
  • 是否有任何框架精明的方法来解决这个问题,或者我必须使用普通的旧-I标志?

小智 4

我认为 gcc 和 ld 两者之间的顺序不同是一个错误。您可以通过向 llvm 和/或 Apple 提交错误来修复该问题。如果图书馆是第一个,我想这会做你想要的。

在那之前,您可以执行以下操作:

$ mkdir Frameworks
$ ln -s /Library/Frameworks/Python.framework Frameworks
$ gcc -FFrameworks -E t.c
Run Code Online (Sandbox Code Playgroud)