当前位置: 技术问答>linux和unix
关于GCC的奇怪问题,高手进。
来源: 互联网 发布时间:2016-07-07
本文导语: 现在遇到的问题是,同样的程序,里面两个.o文件链接顺序不一样,会对程序的结果造成影响,这是什么原理? manager说是GCC链接时候发生异常,把某个变量或形参覆盖了? 大家有没有遇到过这种问题? 要怎么解决...
现在遇到的问题是,同样的程序,里面两个.o文件链接顺序不一样,会对程序的结果造成影响,这是什么原理?
manager说是GCC链接时候发生异常,把某个变量或形参覆盖了?
大家有没有遇到过这种问题? 要怎么解决?
manager说是GCC链接时候发生异常,把某个变量或形参覆盖了?
大家有没有遇到过这种问题? 要怎么解决?
|
不好意思,理解错了,贴一下你程序中write的顺序吧,不是很明确你怎么做的。
|
GCC链接时会对链接文件的顺序有一定的要求,也许这样造成你了的结果不同。
The linker searches and processes libraries and object files in the order they are specified. Thus, ‘foo.o -lz bar.o’ searches library ‘z’ after file ‘foo.o’ but before‘bar.o’. If ‘bar.o’ refers to functions in ‘z’, those functions may not be loaded.
The linker searches and processes libraries and object files in the order they are specified. Thus, ‘foo.o -lz bar.o’ searches library ‘z’ after file ‘foo.o’ but before‘bar.o’. If ‘bar.o’ refers to functions in ‘z’, those functions may not be loaded.
|
还没见过 up
|
加上这样的参数
-Wl,--start-group (lib) -Wl,--end-group
-Wl,--start-group (lib) -Wl,--end-group
|
|
看来不像是GCC的问题。
问题在于你有没有用memory barrier。读到上次的值,似乎是因为这个值在cache中。
你试试在你对硬件地址进行操作前后加上memory barrier,然后把那些硬件地址声明为volatile。
问题在于你有没有用memory barrier。读到上次的值,似乎是因为这个值在cache中。
你试试在你对硬件地址进行操作前后加上memory barrier,然后把那些硬件地址声明为volatile。