Я пытаюсь использовать библиотеку C ++ в Modelica. Компиляторы Modelica генерируют c из источника Modelica и затем вызывают компилятор c для создания исполняемого файла. Modelica предоставляет механизм для вызова функций c. Я создал обертку:
//myWrapper.cpp
#include "headers_of_cpp_library.h"
extern "C" double call_a_cpp_fn(double a, double b){
return cpp_fn(a,b);
}
Внешний код C либо динамически связан с исполняемым файлом Modelica, либо, если код является чистым c, он может быть скомпилирован прямо сгенерированным c. Единственный вариант, который у меня есть, — это пойти по динамическому маршруту. Вот Makefile для сборки библиотеки C ++
all: myWrapper.cpp
clang++ -fPIC -shared -LaCppLib -o libmywrappedcpp.so myWrapper.cpp
Когда я запускаю компилятор Modelica, я получаю некоторые ошибки ссылок, связанные с тем, что существуют библиотеки c ++, которые должны быть динамически связаны.
undefined reference to symbol '__cxa_free_exception@@CXXABI_1.3'
Есть ли способ собрать libmywrappedcpp.so, чтобы компилятор c, вызываемый системой Modelica, не пытался связать c ++?
Задача ещё не решена.
Других решений пока нет …