Это немного сложнее, потому что на самом деле Mono имеет два отдельных исполняемых файлов и две отдельные библиотеки, один для каждого сборщика мусора. Например, если вы запустите mono --gc=sgen ...
, тогда mono на самом деле сделает execvp()
mono-sgen ...
, чтобы переключиться на другой исполняемый файл.
Аналогичным образом mkbundle
будет использовать pkg-config
, чтобы выбрать библиотеку и связать ту или иную (то есть в зависимости от системы по умолчанию). Чтобы получить другую библиотеку, есть два варианта:
Один из них заключается в том, чтобы перестроить Mono, когда значение sgen является значением по умолчанию. Очевидно, что это не может быть жизнеспособным решением.
Альтернативой является использование pkg-config
для отмены выбора. Вы должны создать копию mono-2.pc
, заменить -lmono-2.0
на -lmonosgen-2.0
, обновить prefix
и exec_prefix
и использовать переменную окружения PKG_CONFIG_PATH, чтобы выбрать эту версию.
Обратите внимание, что я никогда не пробовал последний, но нет причин, по которым он не должен работать, поскольку pkg-config
- это то, где mkbundle
получает путь от библиотеки.
Спасибо за ответ. Вы помогли мне понять, что mono-2.pc - это файл, который указывает, что нужно связывать для создания исполняемого файла. Интересно, что уже есть файл monosgen-2.pc, расположенный в каталоге lib/pkgconfig. Это заставляет меня думать, что должен быть способ переопределить использование mono-2.pc с помощью командной строки или переменной среды. Я попытался изменить PKG_CONFIG_PATH, чтобы фактически включить файл, но он не был успешным. – drg
Если вы посмотрите на источник 'mkbundle.cs', вы увидите, что« mono-2.pc »жестко запрограммирован, к сожалению. Однако после тестирования прямо сейчас, это сработало для меня в том, что тестируемая программа была связана с libmonosgen-2.0.0.dylib (на Mac, используя Mono 3.0.10), и она успешно работала. Обратите внимание, что 'PKG_CONFIG_PATH' должен указывать на каталог, содержащий файл, а не на сам файл. –
В приведенном выше ответе вы говорите: «Один из них заключается в том, чтобы перестроить, когда sgen стал стандартным» ... Это означает, что нужно перестроить моно или перестроить приложение. Я предполагаю, что вы имеете в виду перестроить моно, поскольку я не могу найти какую-либо информацию о том, как указать его на mcs. Благодарим вас за то, что вы смотрите на код. К сожалению, из тяжелой базы MS и Visual Studio ... это даже не произошло. Это должно быть :). – drg