【发布时间】:2012-02-28 18:33:00
【问题描述】:
我正在使用不同的链接器脚本。在某些情况下,定义了一个值,在另一些情况下,它没有定义:
DIRECTORY_ADDRESS = 0x80100000;
DIRECTORY_SIZE = 32M;
在执行时,我想要在未定义此值时的默认行为,以及在定义时的特殊行为。
通常,我得到这样的值:
extern void * DIRECTORY_ADDRESS;
extern void * DIRECTORY_SIZE;
void f() {
void *dir_addr = &DIRECTORY_ADDRESS;
int dir_size = (int)&DIRECTORY_SIZE;
}
我的第一个导致条件执行代码根据链接脚本中这个值的存在是弱属性:
extern void * DIRECTORY_ADDRESS __attribute__ ((weak)) = 0x0;
extern void * DIRECTORY_SIZE __attribute__ ((weak)) = 0x0;
void f() {
if ( DIRECTORY_ADDRESS )
// special code
else
// default code
}
但它不起作用,因为我正在初始化指针值,而不是它的地址:即使是未定义的弱符号也有一个地址。所以目录地址总是!= NULL。
我很确定这个问题已经解决了,但是我在网上找不到任何相关的问题。
【问题讨论】:
-
你能不能只使用共享库并检查加载带有你的函数的库是否失败?