Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Renaming symbols at compile time without changing the code in a cross platform way

In creating a static object is it possible to rename the symbols at compile time (without changing the code) in a cross platform way? I have recently had objcopy recommended, but linux is not the only target platform it must also work on a mac. I am compiling using gcc, so I was hoping that there was a gcc option of some sort.

I have heard about .def files, but this may have been misleading as the information about them that I have found seems to be for windows.

Edit: I'm trying to change the name of C and Fortran functions, specifically pre-pending them with the word "wrap" in order to avoid symbol conflicts at link time.

like image 585
V.S. Avatar asked Aug 26 '11 12:08

V.S.


2 Answers

is it possible to rename the symbols at compile time

You might be able to achieve it with preprocessor:

gcc -c foo.c -Dfoo=foo_renamed
like image 192
Employed Russian Avatar answered Sep 22 '22 14:09

Employed Russian


You can use the gcc alias attribute to make multiple symbols that point to the same function.

void name1() __attribute__((alias ("name2")));

I'm not sure if the alias attribute works for other types of symbols (e.g. variables).

like image 33
David Grayson Avatar answered Sep 21 '22 14:09

David Grayson