我有一个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.a,libdummy2.a,libdummy.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)
当我尝试编译main并链接虚拟库时
g++ -o main main.cpp -L. -ldummy1 -ldummy2
Run Code Online (Sandbox Code Playgroud)
链接器不会产生重复的符号错误。当我静态链接两个相同的库时,为什么会发生这种情况?
当我尝试
g++ -o main main.cpp -L. -ldummy1 -ldummy
Run Code Online (Sandbox Code Playgroud)
也没有重复的符号错误,为什么?
加载程序似乎总是选择动态库,而不是选择.o文件中编译的代码。
.so如果它同时存在于.a和.so …