【发布时间】:2020-11-12 17:00:31
【问题描述】:
我正在寻找一种在编译时未定义符号时抑制/满足链接器的方法。 为了说明我要完成的工作,我将举一个简单的例子:
CoreCpp.h 文件:
#include <stdio.h>
int calculate();
CoreCpp.cpp 文件:
#include "CoreCPP.h"
int calculate(){
return 0;
}
使用上面的这两个文件,我将创建一个 .a 静态库。
然后我将在 Xcode 中创建一个简单的命令行项目,如下图所示:
如果我链接静态库,项目将毫无问题地编译:
但是,如果我不链接静态库,则会抛出未定义符号错误。
Undefined symbols for architecture x86_64:
"calculate()", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
问题:有没有办法可以抑制错误或以某种方式使链接器在编译时满意?我们可以在这里应用弱链接的概念吗?
【问题讨论】:
-
我不明白弱链接的概念在这里如何适用。
-
您似乎在询问动态链接,当您为静态链接编译库时,这是不可能的。
-
@Eljay,我可能不正确。我有 Objective C 背景,在 Objective C 中有一个叫做弱链接或可选链接的概念。
-
@zfgo
__attribute__((weak_import))也应该在 C++ 中工作,但它通常与动态链接库一起使用,而不是静态链接库(尽管显然你可以让它与后者一起使用)。见this question。 -
如果您能解释您想要实现的目标以及为什么动态链接不适合您,将会很有帮助。
标签: c++ xcode static-libraries