我想在代码中引入一个弱符号,但是,当使用* .a文件时,我无法理解它的行为。
这是我的最小示例:
文件啊:
void foo() __attribute__((weak));
Run Code Online (Sandbox Code Playgroud)
文件ac:
#include "a.h"
#include <stdio.h>
void foo() { printf("%s\n", __FILE__); }
Run Code Online (Sandbox Code Playgroud)
文件BC:
#include <stdio.h>
void foo() { printf("%s\n", __FILE__); }
Run Code Online (Sandbox Code Playgroud)
文件main.cpp:
#include "a.h"
#include <stdio.h>
int main() { if (foo) foo(); else printf("no foo\n"); }
Run Code Online (Sandbox Code Playgroud)
现在,根据我使用* .o文件(make -c a.c和make -c b.c)还是* .a文件(ar cr a.o和ar cr b.o),输出是不同的:
1)g++ main.cpp a.o b.o打印bc
2)g++ main.cpp b.o a.o打印bc
3)不g++ main.cpp a.a b.a …