PCG 随机数生成器和 Xcode 未定义符号(无法找到内核)

PCG Random Number Generator and Xcode Undefined symbols (unable to find Kernel)

在问这个问题之前,我必须说我目前在 Yosemite 上使用 Xcode 6.2。

我的另一个涉及随机数生成的 C 代码也遇到了这个问题。

所以,我想使用 this famous library to generate random numbers (In particular I'm trying to compile the file called pcg32-demo.c that you can find in the download of Minimal C Implementation 0.9 在同一文件夹中 pcg_basic.c)。我用 Xcode 创建了项目并编译了。然后我收到以下错误消息:

Undefined symbols for architecture x86_64:
"_pcg32_boundedrand_r", referenced from:
      _main in main.o
  "_pcg32_random_r", referenced from:
      _main in main.o
  "_pcg32_srandom_r", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我在谷歌上搜索了一下,似乎我不得不将架构更改为通用。不幸的是,它并没有太大变化,因为我在 32 位

上遇到了同样的错误
Undefined symbols for architecture i386

然后我再次谷歌搜索,因此我添加了框架和库。由于我不知道我需要哪一个,所以我添加了所有这些。但是,我收到此错误消息:

ld: framework not found Kernel
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这有点奇怪!我很确定RNG不涉及内核。

为了编译,我使用了终端中的 gcc gcc pcg32-demo.c 和 Xcode 中的 "play" 按钮。从后者我还得到以下信息:

Ld /Users/edwin/Library/Developer/Xcode/DerivedData/testPCG-eygvqldhuakrfqakhmugrepbwsbt/Build/Products/Debug/testPCG normal x86_64
cd /Users/edwin/Documents/CodeZRPring/Testnewrandom/testPCG
export MACOSX_DEPLOYMENT_TARGET=10.10
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -L/Users/edwin/Library/Developer/Xcode/DerivedData/testPCG-eygvqldhuakrfqakhmugrepbwsbt/Build/Products/Debug -F/Users/edwin/Library/Developer/Xcode/DerivedData/testPCG-eygvqldhuakrfqakhmugrepbwsbt/Build/Products/Debug -filelist /Users/edwin/Library/Developer/Xcode/DerivedData/testPCG-eygvqldhuakrfqakhmugrepbwsbt/Build/Intermediates/testPCG.build/Debug/testPCG.build/Objects-normal/x86_64/testPCG.LinkFileList -mmacosx-version-min=10.10 -Xlinker -dependency_info -Xlinker /Users/edwin/Library/Developer/Xcode/DerivedData/testPCG-eygvqldhuakrfqakhmugrepbwsbt/Build/Intermediates/testPCG.build/Debug/testPCG.build/Objects-normal/x86_64/testPCG_dependency_info.dat -o /Users/edwin/Library/Developer/Xcode/DerivedData/testPCG-eygvqldhuakrfqakhmugrepbwsbt/Build/Products/Debug/testPCG

有谁知道为什么我会收到此错误消息?是不是只和随机数有关?

我想你是从 link 那里得到的错误。问题是,您正在单独编译 pcg32-demo.c 文件,而不是 link 将其与包含 pcg32-demo.c.

中使用的函数的所需定义的其他目标文件进行对比

解决方案:


编辑:

@trojanfoe 先生的宝贵评论之后,看来您需要

  • 将所需文件添加到包含函数定义的 Xcode 中的项目。
  • Link 针对包含 link 生成二进制文件所需的函数定义的库。

否则,

  1. [快捷方式] 使用提供的 makefile。
  2. [漫长而复杂的方式] 编译每个所需的源文件,生成目标文件,然后 link 它们一起生成二进制文件。