【发布时间】:2018-05-13 20:44:05
【问题描述】:
我有两个可动态加载的库 lib_smtp.so 和 libpop.so 等。两者都有一个名为 protocol 的全局变量,分别初始化为“SMTP”和“POP”。我有另一个静态库 libhttp.a,其中 protocol 被初始化为“HTTP”。
现在出于某种原因,我需要静态编译所有动态可链接和可加载库并包含在可执行文件中。这样做我在链接静态库期间收到错误“multiple definition of symbol”。
我很想知道链接器在动态链接过程中如何解析重复符号,其中提到的所有三个库都被链接?
有没有什么方法我可以静态地做与链接器在动态链接中所做的相同的事情,即在没有任何冲突的情况下将所有静态库添加到具有相同符号的可执行文件中?如果不是,为什么静态链接库的过程不同。
【问题讨论】:
标签: c linux build linker dynamic-linking