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);
}
ec
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 ~
$
このような多数のシンボル定義を処理するために、リンカーにさまざまなスクリプトを提供する方法も必要です。そのため、さまざまなケース間のマッピングを作成するリンカー スクリプトを自動的に作成するビルド プロセスの一部にすることができました。