相关疑难解决方法(0)

链接器为什么不抱怨重复的符号?

我有一个dummy.hpp

#ifndef DUMMY
#define DUMMY
void dummy();
#endif
Run Code Online (Sandbox Code Playgroud)

和一个dummy.cpp

#include <iostream>
void dummy() {
      std::cerr << "dummy" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

和main.cpp使用dummy()

#include "dummy.hpp"
int main(){

    dummy();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后,我编dummy.cpp三个库libdummy1.alibdummy2.alibdummy.so

g++ -c -fPIC dummy.cpp
ar rvs libdummy1.a dummy.o
ar rvs libdummy2.a dummy.o
g++ -shared -fPIC -o libdummy.so dummy.cpp
Run Code Online (Sandbox Code Playgroud)
  1. 当我尝试编译main并链接虚拟库时

    g++ -o main main.cpp -L. -ldummy1 -ldummy2
    
    Run Code Online (Sandbox Code Playgroud)

    链接器不会产生重复的符号错误。当我静态链接两个相同的库时,为什么会发生这种情况?

  2. 当我尝试

    g++ -o main main.cpp -L. -ldummy1 -ldummy
    
    Run Code Online (Sandbox Code Playgroud)

    也没有重复的符号错误,为什么?

加载程序似乎总是选择动态库,而不是选择.o文件中编译的代码。

.so如果它同时存在于.a.so …

c++ linker dynamic-linking static-linking

3
推荐指数
1
解决办法
3441
查看次数

标签 统计

c++ ×1

dynamic-linking ×1

linker ×1

static-linking ×1