Здравствуйте, дорогая редакция! Попробовал я собрать onnxruntime (пока без питона). Его сборочный сценарий обнаружил системный onnx, подключил заголовочники и прочёл там то, что ожидал: class OpSchema, class OpSchemaRegistry, их поля и функции, etc. Но соотв. символы в библиотеке будто отсутствуют. https://packages.altlinux.org/tasks/391155/ ld: in function `onnxruntime::Environment::Initialize(std::unique_ptr<onnxruntime::logging::LoggingManager, std::default_delete<onnxruntime::logging::LoggingManager> >, OrtThreadingOptions const*, bool)::{lambda()#1}::operator()() const [clone .isra.0]': undefined reference to `onnx::OpSchemaRegistry::loaded_schema_version' В библиотеке их тоже нет: $ rpm -ql libonnx1 | grep '[.]so' /usr/lib64/libonnx.so.1 /usr/lib64/libonnx.so.1.18.0 /usr/lib64/libonnx_proto.so.1 /usr/lib64/libonnx_proto.so.1.18.0 $ nm --dynamic --demangle /usr/lib64/libonnx.so.1/usr/lib64/libonnx_proto.so.1 | grep ::OpSchema 00000000000c5d60 T onnx::OpSchemaRegistry::Instance() …а хедеры есть: $ grep -r loaded_schema_version /usr/include/onnx /usr/include/onnx/defs/schema.h: loaded_schema_version = target_version; /usr/include/onnx/defs/schema.h: return loaded_schema_version; /usr/include/onnx/defs/schema.h: static int loaded_schema_version; Одно из трёх: — либо я неосилил и не заметил что-то очевидное; — либо в onnxruntime где-то отстрелили себе колено (вообще, в этом апстриме то ли слегка отбитые, то ли весьма отбитые); — либо нужно чинить что-то в пакете onnx. (видимость символов?)
Этот апстрим (https://github.com/onnx/onnx), кажется, тоже отбитый. :( Нашёл в истории проекта вот такое: commit 222a04e0fa9443e53ae6dbf366d740d4ab3567c8 tree f3b43e6fbcec39b7b4aa522c1e2adffe1f843422 parent 1989d57f4814366eb6e7ef43c88e2bac3f7f5b5f author cyyever <cyyever@outlook.com> Fri Sep 27 15:47:18 2024 +0800 committer GitHub <noreply@github.com> Fri Sep 27 07:47:18 2024 +0000 Set hidden visibility on onnx target (#6393) ### Description <!-- - Describe your changes. --> Don't leak symbols. ### Motivation and Context For better code. <!-- - Why is this change required? What problem does it solve? --> <!-- - If it fixes an open issue, please link to the issue here. --> Signed-off-by: cyy <cyyever@outlook.com> diff --git a/CMakeLists.txt b/CMakeLists.txt index d6a3450b..13b062d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -522,6 +522,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "AIX") else() add_library(onnx ${ONNX_SRCS}) endif() +set_target_properties(onnx PROPERTIES CXX_VISIBILITY_PRESET hidden) +set_target_properties(onnx PROPERTIES VISIBILITY_INLINES_HIDDEN 1) target_include_directories(onnx PUBLIC $<BUILD_INTERFACE:${ONNX_ROOT}> Намекают внешним проектам, что "вас здесь не стояло". :( Или, не напрягаясь обосновать, рекомендуют тащить себе дистрибутив исходников и собираться с ним вместе Rust/Golang-style, мол, при статической линковке никаких скрытых символов нет. Тем не менее, представители проекта onnx-mlir на этой неделе оказались в похожей ситуации и решили что-то изменить: https://github.com/onnx/onnx/pull/7179 В итоге анекдот: половину символов раскрыли (по принципу "от балды"), половину не раскрыли.
Придётся, видимо, следуя за рекомендациями апстрима onnxruntime, просто завендорить исходники onnx. По существу, неприятны тут только две вещи: 1) это надо делать руками в gear-репозитории => малый градус верифицируемости действий; 2) у нас нет общего механизма взять исходники именно пакета onnx в нашем репозитории, а не просто какой-то тарболл или, как у них по умолчанию, .zip с гитхаба.
onnx-1.18.0-alt3 -> sisyphus: Thu Nov 13 2025 Nikita Shmatko <nash@altlinux> 1.18.0-alt3 - NMU: Disabled symbol visibility hiding (Closes: #55423).