2017-01-30 26 views
0

Можно ли использовать скрипт компоновщика или файл карты для переименования символа? Я пытаюсь адаптировать некоторый код, написанный в сочетании C++ и Fortran, чтобы он работал с более чем одним компилятором Fortran - на Linux. В настоящее время он написан для компилятора Solaris Studio с возможностью включения чувствительности к регистру. Я хотел бы автоматически обрабатывать изменения в имени символа фортранна (например, из Makefile).переименовать символ с помощью сценария компоновщика

Это представляется возможным создать псевдонимы так, компоновщик скрипт, содержащий:

C_Function_ = c_function; 

сортирует-работы. К сожалению, добавление опции -T для ссылки на этот скрипт вызывает некоторые другие изменения в поведении, и я получаю ошибки из-за того, что libdl.so.2/librt.so.1 не найден. Есть ли какой-то сценарий компоновщика по умолчанию, который мне нужно включить или что-то еще? Я пробовал как с bfd, так и с золотыми линкерами в Linux.

ответ

2

Вы не можете переименовать символы, но вы можете определить псевдонимы для существующих символов, как

PROVIDE(c_function = C_function_); 
... 

в сценарии компоновки.

Если передать этот линкер скрипт с -T опции к ld, он будет заменить оригинал (по умолчанию) линкер сценария. Если вы предпочитаете, чтобы сценарий компоновщика удлинил по умолчанию, передайте его без опции -T (как и с дополнительным объектным файлом).

Таким образом, все должно работать должным образом.

+0

Спасибо, опуская '-T', решает это. Что делает «ПРОВАЙД»? Это предотвращает его работу для случая, когда символ компилируется в общую библиотеку. – okapi

+0

'PROVIDE()' гарантирует, что символ только сглажен, если используемое имя еще не существует. Не уверен, почему это должно столкнуться с созданием общей библиотеки. – mfro