Bug 55423 - undefined reference to `onnx::OpSchema::SetDomain(char const*)'
Summary: undefined reference to `onnx::OpSchema::SetDomain(char const*)'
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: libonnx-devel (show other bugs)
Version: unstable
Hardware: all Linux
: P5 normal
Assignee: Anton Zhukharev
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-07-30 13:37 MSK by Arseny Maslennikov
Modified: 2025-11-13 12:32 MSK (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Arseny Maslennikov 2025-07-30 13:37:07 MSK
Здравствуйте, дорогая редакция!

Попробовал я собрать 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. (видимость символов?)
Comment 1 Arseny Maslennikov 2025-08-05 12:43:34 MSK
Этот апстрим (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
В итоге анекдот: половину символов раскрыли (по принципу "от балды"), половину не раскрыли.
Comment 2 Arseny Maslennikov 2025-08-05 12:49:39 MSK
Придётся, видимо, следуя за рекомендациями апстрима onnxruntime, просто завендорить исходники onnx. По существу, неприятны тут только две вещи:
1) это надо делать руками в gear-репозитории => малый градус верифицируемости действий;
2) у нас нет общего механизма взять исходники именно пакета onnx в нашем репозитории, а не просто какой-то тарболл или, как у них по умолчанию, .zip с гитхаба.
Comment 3 Repository Robot 2025-11-13 12:32:25 MSK
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).