未定义符号 体系结构 x86_64 的未定义符号:“_kCFAllocatorDefault”
Posted
技术标签:
【中文标题】未定义符号 体系结构 x86_64 的未定义符号:“_kCFAllocatorDefault”【英文标题】:undefined symbols Undefined symbols for architecture x86_64: "_kCFAllocatorDefault" 【发布时间】:2012-03-31 10:31:09 【问题描述】:我正在尝试在 eclipse 中的 mac os 10.7 下编译一些东西,但构建失败了:
Undefined symbols for architecture x86_64:
"_kCFAllocatorDefault", referenced from:
___GLeeGetProcAddress in GLee.o
"_CFURLCreateWithFileSystemPath", referenced from:
___GLeeGetProcAddress in GLee.o
"_CFStringCreateWithCString", referenced from:
___GLeeGetProcAddress in GLee.o
"_CFBundleCreate", referenced from:
___GLeeGetProcAddress in GLee.o
"_CFBundleGetFunctionPointerForName", referenced from:
___GLeeGetProcAddress in GLee.o
"_CFRelease", referenced from:
___GLeeGetProcAddress in GLee.o
"_glGetString", referenced from:
___GLeeGetExtensions in GLee.o
_GLeeGetExtStrGL in GLee.o
_GLeeInit in GLee.o
(maybe you meant: _GLee_Lazy_glGetStringi, _GLeeFuncPtr_glGetStringi )
"___CFConstantStringClassReference", referenced from:
CFString in GLee.o
所以我知道问题出在 ld 符号上。现在我尝试在 eclipse 中进行项目属性并将 -framework CoreFramework 添加到 g++ 和 gcc 的参数中,但这并没有解决它。
这些符号位于何处,更重要的是 - 如何将它们添加到我的项目中?
【问题讨论】:
【参考方案1】:我通过将 .dylib 添加到链接器来解决此问题。如何设置?
-
转到项目属性
转到 C/C++ 构建 --> 设置
选择 Mac OS X C++ 链接器 --> 库
这是棘手的部分......我通过“try-error”方法发现了它是如何工作的:
假设您有一个要添加的名为“libMyLib.dylib”的 dylib 文件,位于 /opt/local/lib/MyLibrary
到显示库添加行的窗口的一部分 “我的图书馆” 在显示库搜索路径的窗口的一部分添加行 "/opt/local/lib/MyLibrary/"
=> eclipse 将自动执行此操作: 1.在字符串前面添加“lib” 2.在你的字符串后添加“.dylib”
Mac 还有另一个问题...假设您使用 CoreFoundation 框架中的符号。 Mac OS 框架本质上是带有头文件的 dylibs ...如果您不确定,您可以随时通过“file myFile”进行检查
问题是 Eclipse 永远不会正确地从 MAC OS SDK 和 /System/Library/Frameworks/ 中获取那些 dylib,因为它们没有添加 .dylib。诀窍是简单地转到 dylib 所在的位置(即使它的名称中没有 .dylib),例如 cd /System/Library/Frameworks/CoreFoundation.framework
然后复制文件并添加dylib(不要重命名!!!)
file CoreFoundation
CoreFoundation (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
CoreFoundation (for architecture i386): Mach-O dynamically linked shared library i386
#copy the lib and name it to "eclipse friendly format"
cp CoreFoundation libCoreFoundation.dylib
【讨论】:
【参考方案2】:您可以使用 -framework 选项 例如g++ -framework CoreFoundation ..........
【讨论】:
对我不起作用。我收到“ld: framework not found CoreFoundation”错误。以上是关于未定义符号 体系结构 x86_64 的未定义符号:“_kCFAllocatorDefault”的主要内容,如果未能解决你的问题,请参考以下文章
体系结构x86_64的未定义符号:“ _ OBJC_CLASS _ $ _ RCTImageLoader”