Boost lib linkelesi hiba [a peldakod mar fordul]

Fórumok

Sziasztok,

Nem hasznaltam meg a Boost library-t, es igazabol csak egy projektet szeretnek leforditani ami hasznal, de amikor linkelnem ossze az object file-okat, tele van "undefined reference"-szel (a Boost:Log kellene vegulis csak).

Felturtam a Google-t, de nem adott relevans talalatokat.

Gondoltam, megkerdezem a ChatGPT-t:

https://chatgpt.com/share/673b3d2d-6674-8013-aa59-eef5c3692b17

Keszitett is egy forrast, illetve, hogy hogyan kellene forditani / linkelni, csak sajnos ugyanugy nem mukodik. A forditas / linkeles eredmenye:

https://pastebin.com/ah9ZRJ9z

Mar probaltam kulon forditani aztan linkelni, mindenfele kapcsolokat (pl. -std=c++11 / -std=c++14 / -std=c++17, -DBOOST_LOG_DYN_LINK, ...), de nem jutok elorebb.

Debian 12, GCC 12.2, a Boost library-k elvileg fent vannak (a -dev csomagok is termeszetesen).

 

Valaki tudja, hogyan lehetne mukodokepesse tenni?

 

Koszi

 

Edit:

A fenti kod mar lefordul.

g++  boost.o -lpthread -lboost_log -lboost_log_setup -lboost_thread -o boost

Sajnos amit szeretnek, az me'g nem. Felmerult bennem, hogy amiatt nem megy, hogy C es C++ is van benne.

Egyebken amit el szeretnek erni, hogy ebbol:

https://github.com/SiliconLabs/UnifySDK

le tudjam forditani ezt:

https://github.com/SiliconLabs/UnifySDK/blob/main/applications/zpc/appl…

Hozzászólások

a megfelelo -dev csomagok fenn vannak?
linkeleskor meg kell adni hogy a boots-ot is keressel: -lboost_log (vagy valami hasonlo). de eleve hibas ha te kezzel akarod csinalni. kene valami makefile vagy cmake hozza, es az elvegzi helyetted az ilyet.

A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Azert dobtam be a ChatGPT-s linket, mert ott latszik pontosan, hogy mi a forras es az is hogy a ChatGPT szerint hogyan kell forditani, illetve a forditas kimenete a pastebin.com-on, hogy latszodjon mi a hiba.

Az eredeti project Cmake alapu, csak oriasi. Nekem egyetlen egy executable kellen belole, ami nehany .c / .cpp file, amiket le is forditottam, de osszelinkelni mar nem sikerul. Elosszor megneztem, hogy cmake-kel megye, de ez kb. a legaljan van, fugg a felette levo cuccoktol. Lepegettem felfele, egy ido utan mar Rust meg Docker fuggese van, kb. 10GB lenne mire leforditom - ezt szeretnem elkerulni.

/sza2

Digital? Every idiot can count to one - Bob Widlar

g++ -std=c++11 -Wall -pedantic -g -O0 -DBOOST_LOG_DYN_LINK  -c boosttest.cc
g++  boosttest.o -lpthread -lboost_log -o boosttest

Egy ugyanilyen kérdésnél a -lboost_log volt a válasz

A compile megy (az ment is), de a link nem (a file-om neve boost.c, nem boosttest.c mint a peldaban):

 

g++  boost.o -lpthread -lboost_log -o boost
/usr/bin/ld: boost.o: undefined reference to symbol '_ZN5boost6detail12get_tss_dataEPKv'
/usr/bin/ld: /lib/x86_64-linux-gnu/libboost_thread.so.1.74.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

 

Hozzaadtam a boost_thread library-t, de nem lett sokkal jobb:

g++  boost.o -lpthread -lboost_log -lboost_thread -o boost
/usr/bin/ld: boost.o: in function `boost::log::v2_mt_posix::basic_formatter<char> boost::log::v2_mt_posix::parse_formatter<char>(char const*)':
/usr/include/boost/log/utility/setup/formatter_parser.hpp:207: undefined reference to `boost::log::v2_mt_posix::basic_formatter<char> boost::log::v2_mt_posix::parse_formatter<char>(char const*, char const*)'
collect2: error: ld returned 1 exit status

Ez az masodik uzenet hasonlit a korabbiakhoz - igaz ott tobb volt.

De a -lboost_log ott volt a ChatGPT-s eredetiben is, hasznaltam is.

BTW, azota leszedtem az osszes libboost csomagot (minden verziot, *-dev-et) es ujra felraktam, csak az 1.74-est.

 

Edit: egy -lboost_log_setup hianyzott, igy lefordult - igy visszaterhetek az eredeti projecthez, ami viszont meg nem fordul.

/sza2

Digital? Every idiot can count to one - Bob Widlar

LDFLAGS nincs, de a parancssorban van -L/usr/lib/x86_64-linux-gnu ami szerintem egyenerteku. Viszont dinamikus linkelesnel talan nincs is ra szukseg, elvileg az ldconfig osszegyujti (ldconfig -v paranccsal latszik is, hogy ott vannak).

/sza2

Digital? Every idiot can count to one - Bob Widlar

Pontosítás: Az ldconfig csak a /etc/ld.so.conf által leírt mappákból gyűjtögeti össze a libeket. Ha van olyan libed, ami valami obskúrus helyen van, akkor oda nem fog bekukkantani.

De egyébként a -L nem csak akkor tud segíteni, hanem asszem akkor is, ha több verziód van ugyanabból a libből, mert linkelésnél precedencia van a -L kapcsolóval átadott mappákra, csak utána néz körül a rendszerben.

Blog | @hron84

valahol egy üzemeltetőmaci most mérgesen toppant a lábával 

via @snq-

Igen, csak egyreszt nem ertek hozza, masreszt akkor is ossze kell rakni a "keret cucchoz" a configot. Mivel a project CMake alapu, azt nezegettem, de nekem pilotavizsgasnak tunik.

Megnezem egyebkent a pkg-config-ot, en ugy latom a Boost-hoz nincs.

/sza2

Digital? Every idiot can count to one - Bob Widlar

Ha tudsz tanacsot adni, szivesen veszem.

Tudom, hogy mely forras es header file-ok kellenek a forditashoz illetve elvileg tudom, hogy milyen library-k szuksegesek.

Ha ezekbol valami, valahogy legeneralja, hogy hogyan kell forditani (cmake?) akkor hasznalnam, csak azt kellene tudnom, hogyan rakjam ossze.

/sza2

Digital? Every idiot can count to one - Bob Widlar

Szerkesztve: 2024. 11. 18., h – 19:50

> g++  boost.cpp -DBOOST_LOG_DYN_LINK -lboost_log -lboost_log_setup -lboost_thread -o boost

> file boost
boost: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=ec6c5a5442b4c30cfdd5a43fd2570d62d4d5028b, for GNU/Linux 4.4.0, not stripped

Három komponenst vélek látni, amelyek bármelyike önmagában is garantáltan szopással jár: C++, cmake, boost, éjjájj. Oké, ez négy volt, bocsánat.

Szerkesztve: 2024. 11. 19., k – 08:18

Elég nagy méretű projekt ez. Én először a cmake által generált make targetek (make help) között próbálnám megkeresni a zpc-t és azt külön fordítani. Ez persze lehet, hogy ugyanúgy rengeteg mást behúz. (Lehet úgy paraméterezni a cmake-t is, hogy csak a zpc-re készítse el a build-et).

Lehet még valami make --dry-run kimenetet nézni és abból mazsolázni, de az is "brutál" lesz. :)