LINUX.ORG.RU
ФорумAdmin

Кросскомпиляция проекта на С++ с зависимостими под OpenWRT

 , ,


0

1

Приветствую! Есть проект https://github.com/c-jimenez/open-ocpp с зависимостями, пытаюсь его кросскомпильнуть под Openwrt с помощью соответствующего SDK (OpenWRT 19.07.0 ramips/mt7620).

Так вот прописал все как положено

export STAGING_DIR=/home/d1/IRZ/openwrt-sdk/staging_dir
export PATH=/home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin:$PATH

Создал файл Toolchain.cmake

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER	mipsel-openwrt-linux-gcc)
set(CMAKE_CXX_COMPILER	mipsel-openwrt-linux-g++)
set(CMAKE_SYSROOT /home/d1/IRZ/openwrt-sdk)
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) 
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

set(OPENSSL_INCLUDE_DIR /home/d1/IRZ/openwrt-sdk/staging_dir/host/include/openssl)
set(OPENSSL_ROOT_DIR /home/d1/IRZ/openwrt-sdk/staging_dir/host/include/openssl) 
set(OPENSSL_CRYPTO_LIBRARY /home/d1/IRZ/openwrt-sdk/staging_dir/host/lib/libcrypto.a)
set(OPENSSL_CRYPTO_LIBRARIES /home/d1/IRZ/openwrt-sdk/staging_dir/host/lib/libcrypto.a)
set(OPENSSL_SSL_LIBRARY /home/d1/IRZ/openwrt-sdk/staging_dir/host/lib/libssl.a)
set(OPENSSL_SSL_LIBRARIES /home/d1/IRZ/openwrt-sdk/staging_dir/host/lib/libssl.a)
set(DOPENSSL_SSL_LIBRARY /home/d1/IRZ/openwrt-sdk/staging_dir/host/lib/libssl.a)
set(DOPENSSL_SSL_LIBRARIES /home/d1/IRZ/openwrt-sdk/staging_dir/host/lib/libssl.a)
set(DOPENWRT_ROOT /home/d1/IRZ/openwrt-sdk)

начинаю компилить

cd project_dir
mkdir build
cd build
cmake ../ -DCMAKE_TOOLCHAIN_FILE=/home/d1/IRZ/Crosscompile/OCPPClient/Toolchain.cmake

На выходе получаю ошибку

Searching for OpenSSL executable and dlls
OpenSSL executable: /usr/bin/openssl
 GENCERTS = 0
DIR /home/d1/IRZ/Crosscompile/OCPPClient/build/3rdparty/libwebsockets CMP /home/d1/IRZ/Crosscompile/OCPPClient/3rdparty/libwebsockets/cmake
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
  OPENSSL_INCLUDE_DIR SSL Crypto)
Call Stack (most recent call first):
  /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.16/Modules/FindOpenSSL.cmake:447 (find_package_handle_standard_args)
  CMakeLists.txt:32 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/d1/IRZ/Crosscompile/OCPPClient/build/CMakeFiles/CMakeOutput.log".
See also "/home/d1/IRZ/Crosscompile/OCPPClient/build/CMakeFiles/CMakeError.log".

Пробовал через создание пакетов, helloworld в форме пакета собрал, но вот проект CMake через создание пакета пока не осилил.

Так вот вопрос, может кто подсказать, направить… что я делаю не так? Может флаги какие-то не поставил. Куда можно подсмотреть?


У данного проекта есть требование чтобы в системы был установлен OpenSSL и sqlite3. Если не кросскомпилировать, а просто собирать, то нужно установить требуемые пакеты и далее выполнить команды

cd project_dir
mkdir build
cd build
cmake ../
make 

В таком случае все прекрасно собирается и работает, а вот с кросскомпиляцией беда (((



Последнее исправление: Drus (всего исправлений: 1)

У тебя же ясно написано, что cmake не смог найти OpenSSL
Из твоего конфига сразу бросается в глаза, что ROOT_DIR указывает почему-то на папку с заголовочными файлами
Поправь, перепроверь переменные, попробуй еще раз

ia666
()
Ответ на: комментарий от ia666

В общем поправил Toolchain.cmake,

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR mips)

set(CMAKE_C_COMPILER	mipsel-openwrt-linux-gcc)
set(CMAKE_CXX_COMPILER	mipsel-openwrt-linux-g++)

set(CMAKE_SYSROOT /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl)

set(OPENSSL_ROOT_DIR /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr)

set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) 

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

теперь срабатывает

cmake ../ -DCMAKE_TOOLCHAIN_FILE=/home/d1/IRZ/Crosscompile/OCPPClient/Toolchain.cmake

вывод успешной сборки

Compiling with SSL support
-- Found OpenSSL: /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/lib/libcrypto.so (found version "1.1.1d")  
OpenSSL include dir: /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/include
OpenSSL libraries: /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/lib/libssl.so;/home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/lib/libcrypto.so;ssl;crypto
Searching for OpenSSL executable and dlls
OpenSSL executable: /usr/bin/openssl
 GENCERTS = 0
DIR /home/d1/IRZ/Crosscompile/OCPPClient/build/3rdparty/libwebsockets CMP /home/d1/IRZ/Crosscompile/OCPPClient/3rdparty/libwebsockets/cmake
-- Found OpenSSL: /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/lib/libcrypto.so (found version "1.1.1d") found components: SSL Crypto 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/d1/IRZ/Crosscompile/OCPPClient/build

Но Makefile выдает ошибку

In file included from /home/d1/IRZ/Crosscompile/OCPPClient/src/websockets/libwebsockets/LibWebsocketClient.h:25:0,
                 from /home/d1/IRZ/Crosscompile/OCPPClient/src/websockets/WebsocketFactory.cpp:20:
/home/d1/IRZ/Crosscompile/OCPPClient/3rdparty/libwebsockets/lib/../include/libwebsockets.h:292:10: fatal error: openssl/ssl.h: No such file or directory
 #include <openssl/ssl.h>
          ^~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [src/websockets/CMakeFiles/ws.dir/build.make:76: src/websockets/CMakeFiles/ws.dir/WebsocketFactory.cpp.o] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:3383: src/websockets/CMakeFiles/ws.dir/all] Ошибка 2
make: *** [Makefile:163: all] Ошибка 2

Что же делать?

Drus
() автор топика
Ответ на: комментарий от Drus

Также забыл сказать что поправил .bashrc для кросскомпиляции openssl в целевую архитектуру.

export STAGING_DIR=/home/d1/IRZ/openwrt-sdk/staging_dir
export PATH=/home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin:$PATH

export WORK_ROOT=/home/d1/IRZ
export TOOLCHAIN_ROOT=${WORK_ROOT}/openwrt-sdk/staging_dir
export TOOLCHAIN_SYSROOT=${TOOLCHAIN_ROOT}/toolchain-mipsel_24kc_gcc-7.5.0_musl
export TOOLCHAIN_EXES=${TOOLCHAIN_SYSROOT}/bin
export TOOLCHAIN_NAME=mipsel-openwrt-linux
export AR=${TOOLCHAIN_EXES}/${TOOLCHAIN_NAME}-ar
export AS=${TOOLCHAIN_EXES}/${TOOLCHAIN_NAME}-as
export CC=${TOOLCHAIN_EXES}/${TOOLCHAIN_NAME}-gcc
export LD=${TOOLCHAIN_EXES}/${TOOLCHAIN_NAME}-ld
export NM=${TOOLCHAIN_EXES}/${TOOLCHAIN_NAME}-nm
export RANLIB=${TOOLCHAIN_EXES}/${TOOLCHAIN_NAME}-ranlib

export LDFLAGS="-L${TOOLCHAIN_SYSROOT}/usr/lib"
export LIBS="-lssl -lcrypto -ldl -lpthread"
export TOOLCHAIN_PREFIX=${TOOLCHAIN_SYSROOT}/usr

Процесс компиляции

  1. Скачал openssl разархивировал
  2. Вводил следующие команды
./Configure --cross-compile-prefix=mipsel-openwrt-linux- no-async linux-mips32 --prefix=${TOOLCHAIN_PREFIX}
make clean
make 
make install

По итогу у меня в тулчейне появился кросскомпилированный openssl разбросанный по папочкам в директории

/home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr
Drus
() автор топика
Ответ на: комментарий от Drus

В общем все собралось, пришлось скомпилировать еще и sqlite под целевую платформу и добавить в тулчейн.

работает

cd build
cmake ../ -DCMAKE_TOOLCHAIN_FILE=/home/d1/IRZ/Crosscompile/OCPPClient/Toolchain.cmake

выдает ошибку

make

ошибка

[  2%] Built target helpers
[  2%] Built target GENHDR
[ 25%] Built target websockets
[ 26%] Built target ws
[ 27%] Built target database
[ 27%] Building CXX object src/tools/log/CMakeFiles/log.dir/LogDatabase.cpp.o
/home/d1/IRZ/Crosscompile/OCPPClient/src/tools/log/LogDatabase.cpp: In member function 'void ocpp::log::LogDatabase::log(time_t, unsigned int, const string&, const string&)':
/home/d1/IRZ/Crosscompile/OCPPClient/src/tools/log/LogDatabase.cpp:46:42: error: call of overloaded 'bind(int, time_t&)' is ambiguous
         m_insert_query->bind(0, timestamp);
                                          ^
In file included from /home/d1/IRZ/Crosscompile/OCPPClient/src/tools/log/LogDatabase.h:22:0,
                 from /home/d1/IRZ/Crosscompile/OCPPClient/src/tools/log/LogDatabase.cpp:19:
/home/d1/IRZ/Crosscompile/OCPPClient/src/tools/database/./Database.h:107:14: note: candidate: bool ocpp::database::Database::Query::bind(int, bool)
         bool bind(int number, bool value);
              ^~~~
/home/d1/IRZ/Crosscompile/OCPPClient/src/tools/database/./Database.h:115:14: note: candidate: bool ocpp::database::Database::Query::bind(int, double)
         bool bind(int number, double value);
              ^~~~
/home/d1/IRZ/Crosscompile/OCPPClient/src/tools/database/./Database.h:123:14: note: candidate: bool ocpp::database::Database::Query::bind(int, int32_t)
         bool bind(int number, int32_t value);
              ^~~~
/home/d1/IRZ/Crosscompile/OCPPClient/src/tools/database/./Database.h:131:14: note: candidate: bool ocpp::database::Database::Query::bind(int, uint32_t)
         bool bind(int number, uint32_t value);
              ^~~~
/home/d1/IRZ/Crosscompile/OCPPClient/src/tools/database/./Database.h:139:14: note: candidate: bool ocpp::database::Database::Query::bind(int, int64_t)
         bool bind(int number, int64_t value);
              ^~~~
/home/d1/IRZ/Crosscompile/OCPPClient/src/tools/database/./Database.h:147:14: note: candidate: bool ocpp::database::Database::Query::bind(int, uint64_t)
         bool bind(int number, uint64_t value);
              ^~~~
make[2]: *** [src/tools/log/CMakeFiles/log.dir/build.make:63: src/tools/log/CMakeFiles/log.dir/LogDatabase.cpp.o] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:3328: src/tools/log/CMakeFiles/log.dir/all] Ошибка 2
make: *** [Makefile:163: all] Ошибка 2

Файл Database.cpp включает

#include "sqlite3.h"

Проблема думаю с sqlite3, но не пойму в чем же дело, я же разместил .so .a библиотечки и хедер файлы в тулчейне.

Что же делать?

Drus
() автор топика
Ответ на: комментарий от fsb4000

Вот спасибо, теперь у меня следующая ошибка)

[ 29%] Building CXX object src/rpc/CMakeFiles/rpc.dir/RpcServer.cpp.o
In file included from /home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/IRpc.h:22:0,
                 from /home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcBase.h:22,
                 from /home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcServer.h:24,
                 from /home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcServer.cpp:19:
/home/d1/IRZ/Crosscompile/OCPPClient/src/tools/json/./json.h:28:32: warning: unknown option after '#pragma GCC diagnostic' kind [-Wpragmas]
 #pragma GCC diagnostic ignored "-Wclass-memaccess"
                                ^~~~~~~~~~~~~~~~~~~
/home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcServer.cpp: In member function 'virtual bool ocpp::rpc::RpcServer::wsCheckCredentials(const char*, const string&, const string&)':
/home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcServer.cpp:92:10: error: 'std::filesystem' has not been declared
     std::filesystem::path uri_path(uri);
          ^~~~~~~~~~
/home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcServer.cpp:93:44: error: 'uri_path' was not declared in this scope
     std::string           chargepoint_id = uri_path.filename();
                                            ^~~~~~~~
/home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcServer.cpp:93:44: note: suggested alternative: 'realpath'
     std::string           chargepoint_id = uri_path.filename();
                                            ^~~~~~~~
                                            realpath
/home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcServer.cpp: In member function 'virtual void ocpp::rpc::RpcServer::wsClientConnected(const char*, std::shared_ptr<ocpp::websockets::IWebsocketServer::IClient>)':
/home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcServer.cpp:103:10: error: 'std::filesystem' has not been declared
     std::filesystem::path uri_path(uri);
          ^~~~~~~~~~
/home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcServer.cpp:104:44: error: 'uri_path' was not declared in this scope
     std::string           chargepoint_id = uri_path.filename();
                                            ^~~~~~~~
/home/d1/IRZ/Crosscompile/OCPPClient/src/rpc/RpcServer.cpp:104:44: note: suggested alternative: 'realpath'
     std::string           chargepoint_id = uri_path.filename();
                                            ^~~~~~~~
                                            realpath
make[2]: *** [src/rpc/CMakeFiles/rpc.dir/build.make:89: src/rpc/CMakeFiles/rpc.dir/RpcServer.cpp.o] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:3220: src/rpc/CMakeFiles/rpc.dir/all] Ошибка 2
make: *** [Makefile:163: all] Ошибка 2

Но я так понял кросскомпиляцию я настроил и поезд встал на рельсы, теперь только править код по необходимости наверное)

Спасибо!) Как полный путь пройду, так отпишу здесь весь расклад как надо компилять со всеми настройками. А пока буду вопросы задавать если сложные появятся.

Drus
() автор топика
Ответ на: комментарий от Drus

error: ‘std::filesystem’ has not been declared

-std=c++17 нужно передать компилятору, скорее всего проблема в этом. ( в новых gcc этот стандарт по умолчанию, в более старых по умолчанию C++14)

Хотя может и другая проблема, вот что гугл выдал: https://github.com/nlohmann/json/issues/3090#issuecomment-954149878

https://github.com/nlohmann/json/issues/3090#issuecomment-1236704525

Да, возможно нужно слинковаться с -lstdc++fs

старые компиляторы боль :(

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 2)
Ответ на: комментарий от fsb4000

Новая ошибка объявилась, правильно понимаю что здесь функции в динамических либах называются одинаково?

[ 53%] Built target chargepoint
Scanning dependencies of target open-ocpp-dynamic
[ 53%] Building CXX object CMakeFiles/open-ocpp-dynamic.dir/src/version.cpp.o
[ 54%] Linking CXX shared library ../bin/native/libopen-ocpp.so
/home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/bin/ld: /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/lib/libsqlite3.so:(.sdata+0x0): multiple definition of `__dso_handle'; /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/crtbeginS.o:(.sdata+0x0): first defined here
/home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/bin/ld: /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/lib/libsqlite3.so: in function `_init':
/builder/shared-workdir/build/build_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/musl-1.1.24/crt/mips/crti.s:8: multiple definition of `_init'; /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/lib/crti.o:/builder/shared-workdir/build/build_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/musl-1.1.24/crt/mips/crti.s:8: first defined here
/home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/bin/ld: /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/lib/libsqlite3.so: in function `_fini':
/builder/shared-workdir/build/build_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/musl-1.1.24/crt/mips/crti.s:17: multiple definition of `_fini'; /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/lib/crti.o:/builder/shared-workdir/build/build_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/musl-1.1.24/crt/mips/crti.s:17: first defined here
/home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/bin/ld: /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/lib/libsqlite3.so:(.got+0x0): multiple definition of `_GLOBAL_OFFSET_TABLE_'; /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/lib/crti.o:(.got+0x0): first defined here
/home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/bin/ld: /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/crtendS.o:(.dtors+0x0): multiple definition of `__DTOR_END__'; /home/d1/IRZ/openwrt-sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/usr/lib/libsqlite3.so:(.dtors+0x4): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/open-ocpp-dynamic.dir/build.make:279: ../bin/native/libopen-ocpp.so] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:1344: CMakeFiles/open-ocpp-dynamic.dir/all] Ошибка 2
make: *** [Makefile:163: all] Ошибка 2
Drus
() автор топика

В общем сделал данный мейкфайл, и исправил пару ошибок, который гуглятся в процессе компиляции, и получил свою сборку)

include $(TOPDIR)/rules.mk
 
PKG_NAME:=ocppclient
PKG_VERSION:=06.10.2022
PKG_RELEASE=1
 
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=
 
PKG_MAINTAINER:=drus <zxandruxazx56@yandex.ru>
 
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk #If usingcmake, You must add this line
 
define Package/ocppclient
	SECTION:=net
	CATEGORY:=ocppclient
	DEPENDS:=+kmod-tun +libpthread +librt +libubox +libuci +libstdcpp +libsqlite3 #Add the required dependency library, if you don’t add it, it will compile and report an error
	TITLE:=OCPPClient
endef

define Package/ocppclient/extra_provides
	echo "/home/d1/IRZ/openwrt-sdk/staging_dir/target-mipsel_24kc_musl/usr/lib/libcrypto.so.1.1"; \
	echo "/home/d1/IRZ/openwrt-sdk/staging_dir/target-mipsel_24kc_musl/usr/lib/libssl.so.1.1";
endef
 
define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./SOURCES/* $(PKG_BUILD_DIR)/
endef
 
define Package/occpclient/description
	ocppclient from cmake
endef
 
define Package/ocppclient/install
	$(INSTALL_DIR) $(1)/usr/share/ocppclient
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_BUILD_DIR)/bin/native/libopen-ocpp.so $(1)/usr/lib
	$(CP) $(PKG_BUILD_DIR)/bin $(1)/usr/share/ocppclient
	$(CP) $(PKG_BUILD_DIR)/schemas $(1)/usr/share/ocppclient
endef
$(eval $(call BuildPackage,ocppclient))

Спасибо! Можно закрывать тему) Ах да, при установке пакета .ipk ругался на отсутствие зависимостей, надо было добавить флаг --force-depends к opkg install

Drus
() автор топика
Ответ на: комментарий от Drus

Вот так точно заработает)

define Package/ocppclient
	SECTION:=net
	CATEGORY:=ocppclient
	DEPENDS:=+kmod-tun +libpthread +librt +libubox +libuci +libstdcpp +libsqlite3 +libopenssl +libssl +libcrypto #Add the required dependency library, if you don’t add it, it will compile and report an error
	TITLE:=OCPPClient
endef
Drus
() автор топика
Ответ на: комментарий от Drus

Вот так

define Package/ocppclient
	SECTION:=net
	CATEGORY:=ocppclient
	DEPENDS:=+kmod-tun +libpthread +librt +libubox +libuci +libstdcpp +libsqlite3 +libopenssl +libssl +libcrypto #Add the required dependency library, if you don’t add it, it will compile and report an error
	TITLE:=OCPPClient
endef
Drus
() автор топика