Ну, я никогда не делал этого в Windows, но я делал это во многих средах compile-link-rtl, которые были для него практическими предшественниками. Сначала вы делаете заглушки «цели» без перекрестных ссылок, затем связываете, затем добавляете циклические ссылки, затем повторно связываете. Линкеры, как правило, не заботятся о циклических ссылках или последующих цепочках ссылок, они заботятся только о том, чтобы иметь возможность разрешать каждую ссылку самостоятельно.
Итак, если у вас есть две библиотеки, A и B, которые должны ссылаться друг на друга, попробуйте что-то вроде этого:
- Ссылка A без ссылок на B.
- Ссылка B с ссылками на A.
- Ссылка A, добавление ссылок в B.
Dykam делает хорошее замечание: он компилируется, а не связывается в .Net, но принцип остается тем же: создайте перекрестные ссылки на источники с их экспортированными точками входа, но со всеми, кроме одного, имеющими свои собственные ссылки на остальные погасли. Построить их так. Затем удалите внешние ссылки и восстановите их. Это должно работать даже без каких-либо специальных инструментов, на самом деле, этот подход работал на всех операционных системах, на которых я когда-либо пробовал (около 6 из них). Хотя, очевидно, что-то, что автоматизирует это, было бы большой помощью.