小编And*_*dyB的帖子

__attribute __((弱))和静态库

我想在代码中引入一个弱符号,但是,当使用* .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.cmake -c b.c)还是* .a文件(ar cr a.oar 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 …

c++ g++

8
推荐指数
1
解决办法
4539
查看次数

标签 统计

c++ ×1

g++ ×1