- 论坛徽章:
- 0
|
如果使用GCC, 在定义全局变量的时候如果不小心,使用动态链接库的时候确实会出现奇怪的现象
- $ cat main.c
- #include <stdio.h>
- void foo();
- void bar();
- int
- main(int argc, char *argv[])
- {
- foo();
- bar();
- return 0;
- }
- $ cat foo.c
- #include <stdio.h>
- int x;
- int y = 2;
- void
- foo(void)
- {
- printf("x=%d,y=%d\n", x, y);
- }
- $ cat bar.c
- #include <stdio.h>
- int x = 1;
- int y;
- void
- bar(void)
- {
- printf("x=%d,y=%d\n", x, y);
- }
- $ make
- cc -c -o main.o main.c
- cc -c -o foo.o foo.c
- cc -c -o bar.o bar.c
- cc -o demo1 main.o foo.o bar.o
- cc -o demo2 main.o -L. -lfoo -lbar
- cc -o demo3 main.o -L. -lbar -lfoo
- $ ./demo1; ./demo2; ./demo3
- x=1,y=2
- x=1,y=2
- x=0,y=2
- x=0,y=2
- x=1,y=0
- x=1,y=0
- $
复制代码 |
|