4

我是 libhistory 的新手,所以我正在查看使用 readline 库找到的示例。使用以下命令在命令提示符下编译它:

gcc -o ./a.out /usr/local/share/readline/histexamp.c -lreadline -L/usr/local/lib/
它编译和维护历史。

然后用相同的文件创建了一个 xcode 项目,并链接到它编译好的 readline 库。但是当我运行时,它不会在枚举历史条目时维护历史和崩溃。经过一些试验,我发现 -isysroot 参数是导致此问题的原因:

-isysroot /Developer/SDKs/MacOSX10.6.sdk
gcc 手册页说 isysroot 类似于 --sysroot 选项,但仅适用于头文件。

为什么同一个程序使用这个选项会有不同的行为?

4

2 回答 2

6

-isysroot 用于定义您构建时使用的 SDK。如果您使用 10.6 SDK 构建,然后尝试在 OS X 10.5 上运行,那么您可能会失败。您应该使用与您的程序所需的最低操作系统相对应的任何 SDK 进行构建(以获得最大的向后兼容性)。

于 2010-02-17T12:08:49.857 回答
3
-isysroot /Developer/SDKs/MacOSX10.6.sdk

sysroot 将覆盖系统路径 /usr/local 等。

在我看来,通过 XCode 使用 SDK 路径是一种有问题的方式。如果您想在用户链接 -L/usr/local/lib/ 中搜索,它将导致不存在的路径,例如 /Developer/SDKs/MacOSX10.6.sdk/usr/local/lib/

我认为仅仅为了使用 SDK 而更改 sysroot 根本不是一个好主意

于 2011-08-04T01:30:03.563 回答