LINUX.ORG.RU

Нужна помощь с портированием софта на OpenBSD

 , , ,


0

1

В общем история такая, нужна помощь с портированием проекта на OpenBSD (C++/Qt). В особенностях системы ещё толком не разобрался. Нормального OpenBSD форума не нашёл, поэтому пишу сюда. Проект уже портирован и работает на Linux и Windows, собирается с помощью CMake. Как я понимаю на BSD системах всё устанавливается под одну гребёнку в «/usr/local», даже если пакет идёт из репозитория или это «локально» установленная программа. Пока столкнулся с первой проблемой есть зависимость от библиотеки KDDW, при сборке возникает ошибка линковщика.

★★

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

Ответ на: комментарий от DMITRY

[53/77] Linking CXX shared library lib/libkddockwidgets.so.1.5.1 FAILED: lib/libkddockwidgets.so.1.5.1 … ld: error: undefined symbol: __cxa_atexit … clang++: error: linker command failed with exit code 1 (use -v to see invocation)

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

Беда в том, что эта библиотека везде нормально собирается, кроме OpenBSD. Где-то вычитал на reddit’е, что линковщик на OpenBSD не воспринимает имена версий по типу «test.so.1.2.3», а работают только test.so.1.2. Пробовал поменять, не помогло.

Dr64h ★★
() автор топика

Дядя, ты бы выложил ссылку на исходники и инструкцию по сборке? OpenBSD вряд ли из местных читателей кто-то юзает, но, от нечего делать на рождественских каникулах, могут поставить в виртуалку и попытаться воспроизвести.

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

Вот библиотека KDDW, собирается примерно так:

cmake -G Ninja .
cmake --build .
cmake --build . --target install

Dr64h ★★
() автор топика

Как я понимаю на BSD системах всё устанавливается под одну гребёнку в «/usr/local»

В /usr системный софт, в /usr/local - то что из портов

annulen ★★★★★
()
Ответ на: комментарий от anonymous

Зря ты так категоричен. Но вообще, да. Сырцы бы сначала, а тогда уже можно будет посмотреть.

ТС, тебе сюда → https://www.openbsd.org/faq/ports/

В частности → https://www.openbsd.org/faq/ports/guide.html

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

это вообще реализация С++ ABI. она должна в -lstdc++ лежать

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

Спасибо, почитаю. Руководство, конечно, не маленькое, но, может быть, я что-нибудь откопаю.

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

В принципе всё сводится к написанию порта.

Темплейты есть тут → /usr/ports/infrastructure/templates/

beastie ★★★★★
()
Ответ на: комментарий от salozar

Так?

objdump -tT /usr/lib/libc++.so.8.0 | grep __cxa
0000000000000000     *UND* 0000000000000000 __cxa_atexit
0000000000000000 w   *UND* 0000000000000000 __cxa_finalize
0000000000000000   F *UND* 0000000000000000 __cxa_begin_catch
...

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

ну как видно __сха_atexit на месте, видимо просто при сборке не видно libc++ по нужным путям, почитайте сборочный лог повыше там наверное будет понятно откуда он ее хочет.

abcq ★★
()
Ответ на: комментарий от Dr64h

можно просто внаглую подсунуть в

target_link_libraries(${PROJECT_NAME}
    ${LIBS}
    stdc++
)

возможно причина в том, что почему-то (например рукожопию где-то в сорцах) libstdc++ не висит в зависимостях библиотеки которую вы собираете

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

Порт — это если ты хочешь сделать cd /usr/ports/foo/bar && make install clean

А у него не собирается ВООБЩЕ.

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

linker command failed

А ты

#ifdef __cplusplus
extern "C" {
#endif

нигде не потерял?

anonymous
()

В общем история такая, нужна помощь с портированием проекта на OpenBSD (C++/Qt)

Обычно под OpenBSD ничего не нужно портировать, всё собирается из коробки если собирается под Linux и другие BSD.

Как я понимаю на BSD системах всё устанавливается под одну гребёнку в «/usr/local», даже если пакет идёт из репозитория или это «локально» установленная программа.

В /usr/local ставится только то что идёт из репозитория. «Локально» установленная программа - это собранная внучную что-ли? Под BSD это не принято, принято оформить порт. А если и собрать руками, то точно не в /usr и не в /usr/local, а в какую-то выделенную помойку.

при сборке возникает ошибка линковщика

За первый совет я денег не возьму - её нужно исправить.

slovazap ★★★★★
()
Ответ на: комментарий от salozar

Ага, проблема была в сорцах, а точнее в cmake листе KDDW issue #265, кто-то напортачил с флагами линковки. Им бы вообще его переписать, там и так дофига странных решений и кода времён мамонтов.

Dr64h ★★
() автор топика

Товарищи, всем спасибо за помощь и подсказки, проблема решена.

Dr64h ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.