OpenModelica Export FMU (с внешней функцией C) вызывает ошибку компоновщика - PullRequest
0 голосов
/ 22 апреля 2020

Я создал класс 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 ()

Спасибо за любые идеи или предложения!

...