Я создал класс Modelica, который вызывает функцию extern C.
model MPC
function solve
input Real t, x1, x2 ,x3, f;
output Real u;
external "C" u = solve(t, x1, x2 ,x3, f);
annotation(Library="nmpc", IncludeDirectory="modelica://MPC/Resources/Include",
LibraryDirectory="modelica://MPC/Resources/Library");
end solve;
parameter Real f=100;
algorithm
u := solve(t, x1, x2, x3, f);
end MPC;
Указанные выше модели корректно связаны с libnmmp c .so (общая библиотека Linux) и я могу сделать симуляцию.
Проблема возникает, когда я пытаюсь экспортировать модель как модуль FMU с помощью OMEditor. Короче говоря, я получаю следующую ошибку компоновщика:
/usr/bin/ld: cannot find -lnmpc
Чтобы определить контекст компиляции целевой библиотеки, я использую cmake со следующими Cmakelists:
cmake_minimum_required (ВЕРСИЯ 2.6 )
SET (CMAKE_C_COMPILER "/ usr / bin / clang") SET (CMAKE_CXX_COMPILER "/ usr / bin / clang ++")
проект (01_mpc_cstr)
SET (CMAL_C "$ {CMAKE_CXX_FLAGS} -fPI C")
set (SRC_DIR ./src/)
set (MPC_SRCS $ {SRC_DIR} mp c. cpp)
add_library (nmp c MODULE $ {MPC_SRCS})
find_library (CASADI_LIB libcasadi.so)
if (CASADI_LIB) сообщение (STATUS "Найдена библиотека: $ {CASADI_LIB} "...) target_link_libraries (nmp c $ {CASADI_LIB}) else () сообщение (ПРЕДУПРЕЖДЕНИЕ" Не удается найти библиотеку: $ {CASADI_LIB} "...) endif ()
find_library (STDCXX_LIB libstdc ++. so.6)
if (STDCXX_LIB) сообщение (STATUS "Найдена библиотека: $ {STDCXX_LIB}" ...) target_link_libraries (nmp c $ {STDCXX_LIB}) else ( ) сообщение (ВНИМАНИЕ "Не удается найти библиотеку: $ {STDCXX_LIB}" ...) endif ()
Спасибо за любые идеи или предложения!