标签:printf 引用 enc 过程 使用外部 att main g++ turn
在两个目标文件(a.o与b.o)链接的过程中,如果其中一个目标文件(a.o)通过extern的方式引用了另外一个目标文件(b.o)中的符号flag,但很不幸,在连接的过程中b.o没有被链接进去,所以此时a.o就会报未定义符号flag,那么此时如何解决这个问题呢
这是废话,如果可以直接链接b.o的话,我们就不往下面讲了。。。。
在a.o中引用b.o中的符号flag时,可以指定符号为弱符号(即:如果其他额外文件中含有flag定义就用额外目标文件中的定义,如果都没有这个符号,则使用自己定义的弱符号)
定义test.cpp文件
flag = 10;
int function()
{
return 1;
}
定义main.cpp
#include <stdio.h>
#include "main.h"
extern int flag; // flag为外部定义的变量
int main()
{
printf("flag is %d\n", flag);
return 0;
}
g++ test.cpp main.cpp -o main
./main // flag is 10
以上是正常的使用方法,如果此时在test.cpp中将flag注释掉,执行
g++ test.cpp main.cpp -o main // 上报未定义符号flag
main.cpp:(.text+0x6): undefined reference to `flag‘
举例如下:
定义test.cpp文件
// flag = 10;
int function()
{
return 1;
}
定义main.cpp
#include <stdio.h>
#include "main.h"
extern int __attribute__((weak)) flag = 9;
int main()
{
printf("flag is %d\n", flag);
return 0;
}
g++ test.cpp main.cpp -o main
./main // flag is 9
标签:printf 引用 enc 过程 使用外部 att main g++ turn
原文地址:https://www.cnblogs.com/wangdongfang/p/13593815.html