Mac: Как экспортировать символы из исполняемого файла?

Я пишу исполняемый файл, который использует dlopen () (LoadLibrary () в Windows) для динамической загрузки разделяемой библиотеки. Общая библиотека использует символы из исполняемого файла.

В Windows это возможно. Исполняемые файлы могут экспортировать символы: файлы declspec (dllexport) и .def работают. Компоновщик при создании .exe также создает файл .lib («библиотека импорта»), поэтому DLL просто необходимо связать с этим .lib.

В Linux это тоже возможно. Я передаю -Wl, -export_dynamic при сборке исполняемого файла, чтобы он экспортировал свои символы.

В Mac OS X вместо этого ... -Wl, -export_dynamic не работает, но есть -Wl, -exported_symbols_list, , где - список символов для экспорта (что-то вроде упрощенной версии файла .def). Но в таком случае создать общую библиотеку не так просто: компоновщик жалуется на неразрешенные символы.

Я попробовал взломать: переименовал исполняемый файл в lib .dylib и, при компоновке разделяемого библиотеки, я передал -l <исполняемый файл> . Но он выдает ошибку «не удается связать с основным исполняемым файлом».

Общая проблема заключается в том, что разделяемые библиотеки Linux могут иметь неразрешенные символы, в то время как Windows и Mac OS X не допускают этого. Но в Windows есть «библиотеки импорта» для сопоставления символов с зависимостями, а Mac OS X, по-видимому, не ...

Как это можно решить в Mac OS X? Есть ли эквивалент «библиотеки импорта» (библиотека-заглушка, созданная компоновщиком Windows при создании .dll, поэтому, если какой-либо модуль должен динамически связываться с .dll, он связывается с «библиотекой импорта»)? Или какое-то другое решение?

6
задан user377486 18 October 2010 в 08:27
поделиться