【发布时间】:2016-03-02 17:48:52
【问题描述】:
我们如何知道我们的系统正在使用哪种类型的链接器(静态/动态)?
是由我们使用的库类型(静态/动态)决定的,还是有其他任何东西?
【问题讨论】:
我们如何知道我们的系统正在使用哪种类型的链接器(静态/动态)?
是由我们使用的库类型(静态/动态)决定的,还是有其他任何东西?
【问题讨论】:
您的工具链(例如 GCC + GNU binutils)将提供一个链接器(例如/usr/bin/ld)
用于链接程序(无论是静态的、动态的还是混合的)
两者中的)当您构建它们时。
您的操作系统将提供一个动态链接器(例如/lib/ld-linux.so) 加载程序所需的共享库(如果有)并解析符号 在运行时,根据编码在 由链接器在构建时执行。
【讨论】:
您是项目的主人。因此,当您使用编译器链接器选项创建和设置构建配置时,您需要为代码创建宏定义并将其传递给带有其他选项的编译器。使用此宏来识别代码中的库类型。
编译命令:
gcc -D LINK_STATIC a.cpp ...
代码:
#ifdef LINK_STATIC
... static implementation ...
#end
#ifdef LINK_DINAMIC
... dinamic implementation ...
#end
【讨论】: