我有两个头文件和两个cpp文件:
//f1.h
int f1();
//f1.cpp
include "f1.h"
int f1() {return 1;}
//f2.h
int f2();
//f2.cpp
#include "f2.h"
#include "f1.h"
int f2() {return f1() + 1;}
//main.cpp
#include "f2.h"
int main() {return f2();}
首先,我从f1
和f2
编译共享对象,并根据该共享对象创建一个来自于main.cpp
的二进制文件:
g++ -c -fPIC -shared f1.cpp f2.cpp
g++ -shared -fPIC -o libf.so f2.o f1.o
g++ -o dynamic main.cpp libf.so
现在我对做了一些更改(比如将的返回值改为<2>):
//f1.cpp#
include "f1.h"
int f1() {return 2;}
按照以下方式编译二进制文件:
g++ -o semistatic main.cpp f1.cpp libf.so
问题是“semistatic”二进制文件是否会使用来自“libf”的
f1()
的定义(其中f1
返回1
),还是它将使用静态链接符号(其中f1
返回2
)? 这在不同系统上是否有所不同,我能否指望它在单个系统中保持一致?