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 生成二进制文件所需的函数定义的库。
否则,
- [快捷方式] 使用提供的 makefile。
- [漫长而复杂的方式] 编译每个所需的源文件,生成目标文件,然后 link 它们一起生成二进制文件。
在问这个问题之前,我必须说我目前在 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 生成二进制文件所需的函数定义的库。
否则,
- [快捷方式] 使用提供的 makefile。
- [漫长而复杂的方式] 编译每个所需的源文件,生成目标文件,然后 link 它们一起生成二进制文件。