tc
#define __CONCAT(x,y) x##y
#ifdef SUFFIX
#define __SUFFIX(x) __CONCAT(x,_)
#else
#define __SUFFIX(x) x
#endif
#ifdef UPPER
#define __c(U,l) __SUFFIX(U)
#else
#define __c(U,l) __SUFFIX(l)
#endif
#define xaxpy __c(XAXPY, xaxpy)
#include <stdio.h>
char* xaxpy;
char* DAXPY;
int main()
{
printf(xaxpy);
printf(DAXPY);
}
欧共体
char* xaxpy = "ln";
char* xaxpy_ = "ls";
char* XAXPY = "UN";
char* XAXPY_ = "US";
似乎有一种方法可以在链接时使用以下方法引入符号别名--defsym
:
Cetin@BAKA-CHAN ~
$ gcc -D UPPER -D SUFFIX -c t.c e.c
Cetin@BAKA-CHAN ~
$ gcc -o t t.o e.o -Wl,--defsym=_DAXPY=_xaxpy
Cetin@BAKA-CHAN ~
$ ./t
USln
Cetin@BAKA-CHAN ~
$
还必须有一种方法可以为链接器提供不同的脚本来处理大量此类符号定义。所以我可以让它成为构建过程的一部分,以自动创建在不同案例之间创建映射的链接器脚本。