У меня есть приложение C++, которое построено с Xcode 7.2.1, скомпилировано с диалектом GNU ++ 98 и связано с libstdC++. Мне нужно сделать звонки в dylib, который скомпилирован с C++ 11 и связан с libC++.Может ли приложение скомпилировано против ссылки GNU ++ 98/libstdC++ для dylib, созданной против C++ 11/libC++?
Использования видимости атрибута по умолчанию в членах класса в dylib в:
extern __attribute__((visibility("default"))) void foo(std::string const&, int);
... показывает, что не совместимость ABI (по крайней мере, для строк) - любая функция dylib, которая имеет параметры ЗПП: : строка не может быть связана с приложением.
Является подходящим решением для создания перегруженных функций-членов C++, которые передают только char * params, которые создаются на стороне dylib в std :: string, или есть другие gotchas, требующие создания чистого C API для dylib ?
Примечания: Теперь, после чтения This excellent explanation по вопросу совместимости ABI, он уверен, кажется, есть маленькая надежда, но и построил символ на основе API для станда :: строкового Params ...
Создать класс типа строк? Или даже представление массива. С неявным преобразованием из std string и стандартного макета – Yakk
Вы имеете в виду класс, который не был бы частью dylib? Или, если бы это было частью заголовков dylib, это был бы класс только для заголовков? – SMGreenfield