До сегодняшнего дня я всегда считал, что порядок, который объекты и библиотеки были переданы g++ во время стадии связывания, неважен. Затем, сегодня, я попытался связать код С++ с кодом c. Я завернул все заголовки C во внешнем блоке "C", но у компоновщика все еще были трудности с поиском символов, которые, как я знал, были в архивах объектов C.
В преломлении я создал относительно простой пример, чтобы изолировать ошибку связывания, но, к моему удивлению, более простой пример связан без каких-либо проблем.
После небольшого проб и ошибок я обнаружил, что, эмулируя шаблон привязки, используемый в простом примере, я мог бы получить основной код для ссылки OK. Сначала шаблон был объектным кодом, а второй - вторым, например:
g++ -o serverCpp serverCpp.o algoC.o libcrypto.a
Может кто-нибудь пролить свет на то, почему это может быть так? Я никогда не видел эту проблему при связывании обычного кода С++.